快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

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


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!

想来应该有一定道理的(还是文档看的少,时间啊时间- -!)

也许你还是怀念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




返回类别: 教程
上一教程: 用JAVA实现一个分页类
下一教程: JAVA:附加码生成器(图片)

您可以阅读与"从Hibernate2到3移植的两点初体验"相关的教程:
· 使用PREPAREDSTATEMENT为不同的数据库编写可移植的数据库存取方
· Java多线程中的两个问题
· JAVA中的两个特别变量THIS和SUPER
· JavaBean实现多文件上传的两种方式
· JAVABEAN实现多个文件上传的两种方式
    微笑服务 优质保证 索取样品