网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  精通hibernate之映射继承关系五     
  文章作者:未知  文章来源:水木森林  
  查看:76次  录入:管理员--2007-11-17  
 
  本节的范例程序位于配套光盘的sourcecode/chapter14/14.2目录下,运行该程序前,需要在sampledb数据库中手工创建companies表和employees表,然后加入测试数据,相关的sql脚本文件为/14.2/schema/sampledb.sql。
  
  在dos命令行下进入chapter14根目录,然后输入命令:
  
  ant -file build2.xml run
  
  就会运行businessservice类。businessservice的main()方法调用test()方法,test()方法依次调用以下方法:
  
  findallhourlyemployees():检索数据库中所有的hourlyemployee对象。
  findallemployees():检索数据库中所有的employee对象。
  loadcompany():加载一个company对象。
  saveemployee():保存一个employee对象。
  
  (1)运行findallhourlyemployees()方法,它的代码如下:
  
  tx = session.begintransaction();
  list results=session.find("from hourlyemployee");
  tx.commit();
  return results;
  在运行session的find()方法时,hibernate执行以下select语句:
  select * from employees where employee_type='he' ;
  select * from companies where id=1;
  
  在加载hourlyemployee对象时,还会同时加载与它关联的company对象。
  
  (2)运行findallemployees()方法,它的代码如下:
  
  tx = session.begintransaction();
  list results=session.find("from employee");
  tx.commit();
  return results;
  在运行session的find()方法时,hibernate执行以下select语句:
  select * from employees;
  select * from companies where id=1;
  
  在这种映射方式下,hibernate支持多态查询,对于从employees表获得的查询结果,如果employee_type字段取值为"he",就创建houlyemployee实例,如果employee_type字段取值为"se",就创建salariedemployee实例,这些实例所关联的company对象也被加载。
  
  (3)运行loadcompany()方法,它的代码如下:
  
  tx = session.begintransaction();
  company company=(company)session.load(company.class,new long(id));
  hibernate.initialize(company.getemployees());
  tx.commit();
  
  这种映射方式支持多态关联。如果在company.hbm.xml文件中对employees集合设置了立即检索策略,那么session的load()方法加载的company对象的employees集合中包含所有关联的employee对象。由于本书提供的company.hbm.xml文件对employees集合设置了延迟检索策略,因此以上程序代码还通过hibernate类的静态initialize()方法来显式初始化employees集合。
  
  (4)运行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实例,就执行如下insert语句:
  
  insert into employees(id,name,rate,employee_type,customer_id)
  values(5, 'mary ',300, 'he',1);
  
  以上insert语句没有为salariedemployee类的salary属性对应的salary字段赋值,因此这条记录的salary字段为null。
 
 
上一篇: web环境 hibernate数据源问题补充    下一篇: 精通hibernate之映射继承关系四(图)
  相关文档
开发框架:我认为spring的一些负面因素 01-07
ejb是如何封装事务逻辑的? 11-17
java学习:再探弥补java与com的间隙 11-16
sun让 jsf 光着身子降临到java web世界 11-16
如何避免jsp中form重复提交的三种方案 12-11
vector & arraylist 哪一个更好?为什么 02-02
测试实践:eclipse 之 junit 11-17
java技术:存储过程的基本的和高级特性 11-16
java 3d 骰子动画代码范例 11-17
结合ms ajax将js文件编译到动态链接库 11-17
java程序性能优化(辛苦了几个小时,还经历了一次停电,我真是命.. 11-17
配置jsp环境的win2k advanceserver+java sdk+apache+tomcat 11-17
jdbc2.0扩展api(2) 11-17
秉承java思路 开发易于移植的j2me游戏 11-16
java基础:高手解析java实现中文排序 12-25
在.net框架中保留应用程序设置 11-17
小技巧:在java中轻松实现界面跳转 11-17
j2ee综合--hibernate的事务处理机制 01-15
全面解析jdbc(1) 11-17
java环境中封装多midiet程序 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息