THE*_*all 7 java hibernate jpa spring-data entitygraph
所以我找到了一些答案,一个说可以这样做,另一个说不行。这让我很困惑,因为当我尝试这样做时——我失败了。
我想要的是在子图中引用命名实体图,如下所示:
@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;
}
Run Code Online (Sandbox Code Playgroud)
@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;
}
Run Code Online (Sandbox Code Playgroud)
我想使用Spring数据存储库方法:
@EntityGraph(value = "Parent.all")
List<ParentAll> findAll();
Run Code Online (Sandbox Code Playgroud)
但当我想引用grandChildren类似的内容时,我仍然遇到 LazyInitializationException parent.child.grandChildren(注意,一旦我手动将 @NamedSubgraph 添加到 Parent 实体 - 一切正常)。那么是否可以这样做以使代码更简洁并且不重复自己呢?我在这里错过了什么吗?
小智 0
据我所知,您必须分别定义命名图和子图,因为子图必须是 NamedSubgraph 类型,而不是 NamedEntityGraph 类型。
@NamedEntityGraph(
name = "Parent.all", attributeNodes = {
@NamedAttributeNode(value = "child", subgraph = "Child.all")},
subgraphs = {
@NamedSubgraph(name = "Child.all", attributeNodes = @NamedAttributeNode("grandChildren"))}
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1292 次 |
| 最近记录: |