hibernate 的lazy加载问题

yuanhotel 07-04-19

banq大哥:
用了Hibernate, 但是没有用Spring.
我有一个类中有两个方法:
1,List list=mgr.list();通过HibernateSession得到list列表。里面对象为“对象1”,“对象1”有一个Set属性,是一个对象集合,这个对象为“对象2”,并且配置文件设置为lazy。
2,Set set=mgr.set(list);将里面set对象重新组成这个对象集合,去掉了重复,这个里面没有用到HibernateSession。
但是再用到方法2时就报错:net.sf.hibernate.LazyInitializationException: Failed to lazily initialize a coll
ection - no session or session was closed
at net.sf.hibernate.collection.PersistentCollection.initialize(Persisten
tCollection.java:209)
这个问题困或了我好长时间,不知怎么解决?

yuanhotel
2007-04-19 12:54

怎么没有人看哪?请问大家没有遇到这个情况吗?

diz
2007-04-19 16:18

由于你是lazy的,当你取这个List的时候,这个对象已经detch掉了!

yuanhotel
2007-04-20 22:23

应该不是吧,但是只要这个持久对象在的话,就可以与数据库进行交互吧

diz
2007-04-23 09:38

当然不是!hibernate的po是用cglib动态生成的,楼主请去看一下SessionFactoryImpl中的代码,所有的Po是放在一个HashMap里面的,当时transcient方法会从map中remove掉一个对象!这个就是为什么hibernate非常强调用有业务意义的逻辑去写hashcode和equal的原因