Hibernate的fetch问题,都琢磨一晚上了

xml里lazy设置true,java里这么写:


result = s.createCriteria(JtsUser.class)
.setFetchMode("jtsHistories", FetchMode.JOIN)
.add(Restrictions.idEq(2))
.list();

此时result.size为4,但xml里lazy设置false,java里这么写

result = s.createCriteria(JtsUser.class)
.add(Restrictions.idEq(2))
.list();

result.size就为1了,按理说两种写发是等价的.
附:JtsUser包含jtsHistories,idEq(2)的JtsUser对应4个jtsHistory记录

lazy懒加载是Hibernate最重要功能之一,怎么能说前后写法是等价的,建议好好研究lazy设置为true和false涉及的一系列重要区别。

lazy=true之后设置.setFetchMode("jtsHistories", FetchMode.JOIN)不就是把对象fetch出来了吗,也不就是等价于lazy=false了吗?两种写法都可以把子对象fetch出来,可是我不明白为什么结果list长度不一样,说的不对的地方还请指教

lazy=true以后,一个对象下的List就可能一次性全部取出,而设置false,则不是一次性取出,List实际是一个代理对象,只有外界访问这个List是,Hibernate才真正访问数据库