赛迪网 > IT技术 Java > Java读书频道-上
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

精通Hibernate之映射继承关系(二) (5)

发布时间:2005.09.14 23:14     来源:赛迪网    作者:孙卫琴

为了检索所有的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()方法,它的代码如下:

tx = session.beginTransaction();
Company company=(Company)session.load(Company.class,new Long(id));

List hourlyEmployees=session.find("from HourlyEmployee h where h.company.id="+id);
company.getEmployees().addAll(hourlyEmployees);

List salariedEmployees=session.find("from SalariedEmployee s where s.company.id="+id);
company.getEmployees().addAll(salariedEmployees);

tx.commit();
return company;

由于这种映射方式不支持多态关联,因此由Session的load()方法加载的Company对象的employees集合中不包含任何Employee对象。BusinessService类必须负责从数据库中检索出所有与Company对象关联的HourlyEmployee对象以及SalariedEmployee对象,然后把它们加入到employees集合中。

(3)运行saveEmployee(Employee employee)方法,它的代码如下:

tx = session.beginTransaction();
session.save(employee);
tx.commit();

在test()方法中,创建了一个HourlyEmployee实例,然后调用saveEmployee()方法保存这个实例:

Employee employee=new HourlyEmployee("Mary",300,company);
saveEmployee(employee);

Session的save()方法能判断employee变量实际引用的实例的类型,如果employee变量引用HourlyEmployee实例,就向HE表插入一条记录,执行如下insert语句:

insert into HOURLY_EMPLOYEES(ID,NAME,RATE,CUSTOMER_ID)
values(3, 'Mary',300,1);

如果employee变量引用SalariedEmployee实例,就向SE表插入一条记录。

(T117)

<<上一页 1 2 3 4 5


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 在Eclipse 3.1中体验J2SE 5.0新特性二 (09-14) · 技术进阶新篇 关于Java线程的深入探讨 (09-14)
· 精通Hibernate之映射继承关系(一) (09-14) · Java之父出风头 数字电视标准有望采用Java (09-14)
· 技术专题巨献:内存泄漏,走开! (09-13) · POI——架起Java与Office之间的桥梁 (09-13)
· JBuilder2005+JBOSS+Oracle9i环境配置 (09-13) · Eclipse基础——Java环境变量设置 (09-13)
· Java网络编程之URI、URL研究专题(上) (09-13) · 恢复磁盘自由之身 节制文件系统空间十招 (09-13)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 回顾ERP市场发展经历 提醒CIO选型需理性
· 网银系统拥堵 SOA从治病良方到罪魁祸首
· 国产ITIL运维先行者 四大厂商角力BI市场
· 金融行业GSN专题解决方案 企业网解决方案
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统