Hibernate的fetch问题,都琢磨一晚上了 2007-05-13 lizarb 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记录
lizarb 2007-05-14 15:04 lazy=true之后设置.setFetchMode("jtsHistories", FetchMode.JOIN)不就是把对象fetch出来了吗,也不就是等价于lazy=false了吗?两种写法都可以把子对象fetch出来,可是我不明白为什么结果list长度不一样,说的不对的地方还请指教
banq 2007-05-15 14:20 lazy=true以后,一个对象下的List就可能一次性全部取出,而设置false,则不是一次性取出,List实际是一个代理对象,只有外界访问这个List是,Hibernate才真正访问数据库