JPA实体图:哪些连接类型?
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"))) 为什么订
@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中的所有实体,则需要联接类型。在这种情况下,无法指定联接类型。