好.我知道它们之间的区别,但我应该避免连接,只需使用fetch o joinfetch查询对象属性的情况.让我们说我想要一组学生的名单.我应该查询小组并访问学生.或者可以查询与学生联系的小组.或者都是一样的.
我没有双向关系.
如果要避免延迟抓取/强制急切提取,则应使用fetch/fetch join.
例如,当您查询组或组列表时:select * from Group where id=??
在您使用group.getStudents()执行某些操作之前,不会从数据库加载学生.如果您仍然在交易中,那么您将从数据库中加载学生,或者如果您在交易之外,您将获得延迟提取异常.
但是,如果您使用:select g from Group g fetch join g.students您将立即从数据库中加载组和所有学生.
所以你应该总是使用fetch join吗?不,只有当你需要..
如果您知道每次都会访问所有小组的所有学生,那么一次性获取它们是有意义的.如果您根本不需要访问学生,那么使用fetch是没有意义的.
这也是为什么在集合上使用FetchType.EAGER通常是一个非常糟糕的主意!
| 归档时间: | 
 | 
| 查看次数: | 3949 次 | 
| 最近记录: |