JPA fetch vs join。联盟是否已被弃用?

时间:2012-03-23 11:54:10

标签: java jpa

确定。我知道它们之间的区别,但我应该避免连接,只需使用fetch o joinfetch查询对象属性的情况。让我们说我想要一组学生的名单。我应该查询小组并访问学生。或者可以查询与学生联系的小组。或两者都是一样的。

我的工作没有双向关系。

1 个答案:

答案 0 :(得分:5)

如果你想避免延迟抓取/强制急切提取,你应该使用fetch / fetch join。

例如,当您查询组或组列表时:select * from Group where id=?? 在您使用group.getStudents()执行某些操作之前,不会从数据库加载学生。如果您仍然在交易中,那么您将从数据库中加载学生,或者如果您在交易之外,您将获得延迟获取异常。

但是如果您使用:select g from Group g fetch join g.students,您将立即从数据库中加载组和所有学生。

那么你应该总是使用fetch join吗?不,只有当你需要..

如果您知道每次都会访问所有小组的所有学生,那么一次性获取它们是有意义的。如果您根本不需要访问学生,那么使用fetch是没有意义的。

这也是为什么在集合上使用FetchType.EAGER通常是个坏主意的原因!