Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA获取vs连接。联接是否已弃用?_Java_Jpa - Fatal编程技术网

Java JPA获取vs连接。联接是否已弃用?

Java JPA获取vs连接。联接是否已弃用?,java,jpa,Java,Jpa,嗯。我知道它们之间的区别,但我是否应该避免连接,而只是在查询对象属性时使用fetch o joinfetch。假设我想要一组学生的名单。我是否应该查询组并访问学生。或者询问与学生进行连接的小组。或者两者都一样 我的工作没有双向关系。如果要避免延迟抓取/强制急切抓取,应该使用fetch/fetch join 例如,当您查询组或组列表时:select*from group,其中id=?? 在使用group.getStudents()执行某些操作之前,不会从数据库加载学生。如果您仍然在事务内部,那么您

嗯。我知道它们之间的区别,但我是否应该避免连接,而只是在查询对象属性时使用fetch o joinfetch。假设我想要一组学生的名单。我是否应该查询组并访问学生。或者询问与学生进行连接的小组。或者两者都一样


我的工作没有双向关系。

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

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

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

那么您应该始终使用fetch join吗?不,只有在你需要的时候

如果你知道你每次都会访问所有小组的所有学生,那么一次就可以让他们进入。如果你根本不需要访问学生,那么使用fetch是没有意义的


这也是为什么在集合上使用FetchType.EAGER通常是一个非常糟糕的主意的原因

“我知道他们之间的区别”——我想你不知道。“fetch vs join”作为比较没有意义,这两个概念是正交的。聪明的答案。但我所讨论的是joinfetch eclipselink操作,而不是jpql查询中的joinfetch。不必进行查询,例如:getstudents by groups,因为在组中进行查询时可能会变得懒惰。这实际上是一个jpql连接和jpa fetchjoin注释。好的,对不起。我现在明白了。对不起,英语不是我的母语。如果学生们有一个项目清单呢。如果我查询组,它会获取项目吗?。示例:查询:从grupo g中选择g,其中g.id=1。那么我可以这样做吗?Mygroup.getstudents().get(0.getproyects();?默认情况下,这也是延迟获取的。因此,当您在交易中时,是的,您可以这样做。但是你也可以使用fetchjoin:从g组中选择g fetchjoin g.students s fetchjoin s.projects我听说有一个懒散的例外。我该怎么做才能避免这种情况?