转自 : http://forum.javaeye.com/viewtopic.php?t=11354&start=0&postdays=0&postorder=asc 500)this.width=500'>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 500)this.width=500'> |