【问题标题】:Can subgraph reference another named entity graph?子图可以引用另一个命名实体图吗?
【发布时间】:2021-02-26 05:18:28
【问题描述】:

所以我找到了一些答案,一个说可以这样做,另一个说不能。这让我很困惑,因为当我尝试这样做时 - 我失败了。

我想要的是在这样的子图中引用命名实体图:

@Entity
@Table(name = "parent")
@NamedEntityGraphs({
    @NamedEntityGraph(
        name = "Parent.all",
        attributeNodes = {
            @NamedAttributeNode(value = "child", subgraph = "Child.all"), // here I am referencing graph specified in Child entity
        }
    )
})
public class ParentModel {

  @OneToOne(
      mappedBy = "parent",
      fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
  private ChildModel child;

}
@Entity
@Table(name = "child")
@NamedEntityGraphs({
    @NamedEntityGraph(
        name = "Child.all",
        attributeNodes = {
            @NamedAttributeNode(value = "grandChildren"),
        }
    )
})
public class ChildModel {

  @OneToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "parent_id")
  private ParentModel parent;

  @OneToMany(
      mappedBy = "child",
      fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
  private Set<GrandChild> grandChildren;

}

而我想使用 Spring Data repository 方法:

@EntityGraph(value = "Parent.all")
List<ParentAll> findAll();

但是当我想引用 grandChildren 之类的 parent.child.grandChildren 时,我仍然收到 LazyInitializationException(请注意,只要我手动将 @NamedSubgraph 添加到父实体 - 一切正常)。那么是否可以这样做以使代码更清晰而不重复自己?我在这里遗漏了什么吗?

【问题讨论】:

    标签: java hibernate jpa spring-data entitygraph


    【解决方案1】:

    据我所知,您必须分别定义命名图和子图,因为子图必须是 NamedSubgraph 类型,而不是 NamedEntityGraph。

    @NamedEntityGraph(
        name = "Parent.all", attributeNodes = {
            @NamedAttributeNode(value = "child", subgraph = "Child.all")},
        subgraphs = {
            @NamedSubgraph(name = "Child.all", attributeNodes = @NamedAttributeNode("grandChildren"))}
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多