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

如题:
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修改过]

放大事务跨越长度,或使用反向控制,应用查询填充集合。
推荐把事务控制在业务作业上,对于dao完成不了一个业务操作,也没必要控制事务

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

可以设置批量,子查询,或者你说的join来获取。

openSessionInView

查询的时候直接用
from User u left join fetch u.articles
如果article很多的时候
瞎猜个批量大小,设置批量抓取
[该贴被yellowcat于2009-06-07 16:43修改过]