精通Hibernate之映射继承关系三 - 编程入门网
employee=new HourlyEmployee("Mary",300,company);
saveEmployee(employee);
}
private void printAllEmployees(Iterator it){
while(it.hasNext()){
Employee e=(Employee)it.next();
if(e instanceof HourlyEmployee){
System.out.println(((HourlyEmployee)e).getRate());
}else
System.out.println(((SalariedEmployee)e).getSalary());
}
}
public static void main(String args[]) throws Exception {
new BusinessService().test();
sessionFactory.close();
}
}
BusinessService的main()方法调用test()方法,test()方法依次调用以下方法。
findAllEmployees():检索数据库中所有的Employee对象。
loadCompany():加载一个Company对象。
saveEmployee():保存一个Employee对象。
精通Hibernate之映射继承关系三(3)时间:2011-08-09(1)运行findAllEmployees()方法,它的代码如下:
为了检索所有的Employee对象,必须分别检索所有的HourlyEmployee实例和SalariedEmployee实例,然后把它们合并到同一个集合中。在运行Session的第一个find()方法时,Hibernate执行以下select语句: select * from HOURLY_EMPLOYEES; select * from COMPANIES where ID=1; 从HourlyEmployee类到Company类不是多态关联,在加载HourlyEmployee对象时,会同时加载与它关联的Company对象。 在运行Session的第二个find()方法时,Hibernate执行以下select语句: select * from SALARIED_EMPLOYEES; 从SalariedEmployee类到Company类不是多态关联,在加载SalariedEmployee对象时,会同时加载与它关联的Company对象。在本书提供的测试数据中,所有HourlyEmployee实例和SalariedEmployee实例都与OID为1的Company对象关联,由于该Company对象已经被加载到内存中,所以Hibernate不再需要执行检索该对象的select语句。 (2)运行loadCompany()方法,它的代码如下:
由于这种映射方式不支持多态关联,因此由Session的load()方法加载的Company对象的employees集合中不包含任何Employee对象。BusinessService类必须负责从数据库中检索出所有与Company对象关联的HourlyEmployee对象以及SalariedEmployee对象,然后把它们加入到employees集合中。 精通Hibernate之映射继承关系三(4)时间:2011-08-09(3)运行saveEmployee(Employee employee)方法,它的代码如下:
在test()方法中,创建了一个HourlyEmployee实例,然后调用saveEmployee()方法保存这个实例: Employee employee=new HourlyEmployee("Mary",300,company); saveEmployee(employee); Session的save()方法能判断employee变量实际引用的实例的类型,如果employee变量引用HourlyEm |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |