确认一个问题:
1.通过Join获得的集合,即使是集合的全体,在通过它的宿主对象访问这个集合时,还是会重新生成SQL来加载这个集合?
验证结果:的确如此。看来Hibernate还没有如此智能。这个问题也从侧面解释了join和fetch的不同:join可以有 过滤 条件,不一定会将关联对象全部取出。但是fetch总是是将关联对象全部取出的。经过join加载出的对象应被视为独立的个体,hibernate不会设定它与已存在对象间的关系。这就是为什么通过join取得的集合, 在通过它的宿主对象访 问这个集合时,还是会重新生成SQL来加载这个集合的原因。但是通过fetch取得的对象就不同了。fetch出来的对象都已经设定了它们之间的关联关系,可以自由导航而不会生成任何sql重新查询!
本文探讨了Hibernate中Fetch与Join的区别。通过实验验证了通过Join获取的集合即使被完全加载,在通过宿主对象访问时仍会重新生成SQL来加载;而Fetch加载的对象则已设定好关联关系,可直接导航使用。
1188

被折叠的 条评论
为什么被折叠?



