• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

从Hibernate2到3移植的两点初体验

发布: 2007-7-14 21:19 | 作者: 佚名    | 来源: 网络转载     | 查看: 12次 | 进入软件测试论坛讨论

领测软件测试网   H3提供了很多令人兴奋的特性,从RC1提供download开始便在机器上创建了新的H3test project,由于时间问题,H3的E文doc也只看到第五章节(都是打印A4纸阅读的,饭前厕中枕边 苦~),而且一直到前天才开始正式代码移植...
  
  这两天感受并不多,本来没想发到javaeye,但是关于H3的lazy机制,觉得还是有点费解,并不是机制本身,而是其进行如此大的变动的目的
  
  从H2到H3,在下目前接触到的只有两点比较重要(包名更改比较容易,批量替换吧):
  1.session interface API的变更 find/iterate 等一些method在H3中已经不再支持 但是在org.hibernate.classic.Session这个接口还是为用户提供了以上的method,但是我想classic也不是长久之策,呵呵,以Gavin的观点,所有的query操作,createQuery()才是王道
  
  2.Lazy机制,这个就比较迷茫的...
  看看测试代码先
  java代码:
  
  
  HBM文件:
  <hibernate-mapping package="h3test.example.db.PO">
  <class name="UserPO" table="users" >
  <id name="id"
  type="long"
  column="ID">
  <generator class="increment"/>
  </id>
  
  <property name="name" type="string"/>
  <property name="nickname" type="string"/>
  <property name="vip" column="isVIP" type="boolean"/>
  </class>
  </hibernate-mapping>
  
  代码
  UserPO u=(UserPO)op.getSession().load(UserPO.class,new Long(3));
  op.close();
  System.out.println(u.getName());
  
  以上代码在H3会得到LazyInitializationException错误,也就是说,在H3里,session.close()之前,如果未对PO进行操作,那么PO实际上只是proxy,It's so interesting,由于没有对H3有很深的理解,在下花了很长时间,最后在hibernate的论坛中找到了以上答案,对于H3为什么采用这种新的Lazy机制,目前
  
  还不敢乱下结论 但看到Gavin 对用户释疑时这样说:
  
  Stop arguing with me, and obey the migration guide!//小新技术网www.xker.com
  
  想来应该有一定道理的(还是文档看的少,时间啊时间- -!)
  
  也许你还是怀念H2中的一次性load出PO而不是proxy,那么在hbm文件中的class 中声明lazy="false"来实现,请注意这是H3中新的属性设置,而且它的默认值是"lazy="true"";或者采用控制session生命周期的方法,把它交给filter来控制,两种方法只是个人拙见,希望各位指正
  
  嗯,关于Lazy问题在Hibernate官方论坛的帖子
  http://forum.hibernate.org/viewtopic.php?t=939532&postdays=0&postorder=asc&start=0
  
  Hibernate3 Migration Guide 持续更新的,H2->H3用户必看,可惜为什么等我都找到答案才发现这个页面呢?sigh
  http://www.hibernate.org/Documentation/Hibernate3MigrationGuide#A7

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网