Hiberante问题:session关闭后如何获得该对象的懒加载对象。

08-10-15 ggggggg
如题:

eg:

User对象中包含一个Set<Article>集合,

在Hibernate配置文件中设置 一对多关联 的 懒加载属性为 TRUE;

User user = UseDao.getUser(); //此时session已经关闭

如果此时要读取Article,显然是不行的。

user.getArticles();

试着使用另新建立一个session

调用该Session的lock方法

session.lock(user, LockMode.NONE);

很遗憾,获得 user.getArticles().size=0;

而我明明是有数据的

many Thanks。

[该贴被ggggggg于2008-10-15 18:22修改过]

         

freebox
2008-10-15 19:42
放大事务跨越长度,或使用反向控制,应用查询填充集合。

推荐把事务控制在业务作业上,对于dao完成不了一个业务操作,也没必要控制事务

freeren
2008-10-16 23:14
经过这两天的学习,如果没理解错的话:

lazy load得到的是关联对象的代理,其实就只有关联对象的标识。那么当我们再次要查看关联对象时就会启动新的session去检索对象。这样做的好处是不用一次把所有的对象都加载出来,但是DB却执行了n+1条sql语句。而如果不用lazy load的话,用join就一次把所有对象加载出来。

xmuzyu
2008-10-16 23:18
可以设置批量,子查询,或者你说的join来获取。

herowzz
2008-12-16 09:28
openSessionInView

猜你喜欢
2Go 1 2 下一页