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
JPA实体图:哪些连接类型?_Jpa_Left Join_Entitygraph - Fatal编程技术网

JPA实体图:哪些连接类型?

JPA实体图:哪些连接类型?,jpa,left-join,entitygraph,Jpa,Left Join,Entitygraph,JPA实体图:例如 订单-订单项-产品 @NamedEntityGraph(name = "order", attributeNodes = @NamedAttributeNode(value = "orderItems", subgraph = "orderItems"), subgraphs = @NamedSubgraph(name = "orderItems", attributeNodes = @NamedAttributeNode("product"))) 为什么订

JPA实体图:例如

订单-订单项-产品

@NamedEntityGraph(name = "order", 
   attributeNodes = @NamedAttributeNode(value = "orderItems", subgraph = "orderItems"), 
   subgraphs = @NamedSubgraph(name = "orderItems", attributeNodes = @NamedAttributeNode("product")))

为什么
订单->订单项和订单项->产品没有joinType?实体图中的所有联接都应该是左联接?

实体图的目的是定义结果图中要包含的内容


这不会影响联接类型。因此,加载依赖项的方式与加载不带EntityGraph的依赖项的方式相同。

在创建联接时,必须在JPQL查询或条件查询中指定联接类型

例如,下面的查询将导致三个表之间的内部联接

select o from Order o join fetch o.orderItems items join fetch items.product p
下面的查询将导致三个表之间的左外部联接 :

但如果直接执行上述查询,hibernate将返回所有三个表的交叉连接

select o from Order o join fetch o.orderItems items join fetch items.product p
**因此,要获得追溯拟合(所有关系都已正确初始化)实体,您必须将实体图作为提示传递给查询。实体图不会更改您在查询或条件查询中指定的联接类型。它只指示hibernate急切地获取关系,并将它们正确地重新装配到实体中。 **

检查我的github链接:

CriteriaQuery可以指定联接类型。但是对于具有entityGraph的find()方法,并且使用一个SQL和联接来加载entityGraph中的所有实体,则需要联接类型。在这种情况下,无法指定联接类型。