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

3 java jpa

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

我没有双向关系.

bar*_*sju 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通常是一个非常糟糕的主意!