【发布时间】:2016-11-28 12:55:20
【问题描述】:
我正在使用 JPA 实体图来急切地加载关系。
但是,我的问题是:
关系是这样的自关系:
public class X{
...
@OneToOne
@JoinColumn(name = "foreign_key")
protected @Getter @Setter X parent;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private @Getter @Setter Set<X> children;
}
所以,当我从数据库中获取对象 X 时,孩子也会被加载。这是对的。但是,当我获得 children Set 的第一个对象并获得他们的孩子时,hibernate 会在数据库中执行另一个查询。
我的实体类是这样注释的:
@NamedEntityGraph(
name = "cobranca-com-lancamentos-com-filhos",
attributeNodes = {
@NamedAttributeNode(value = "children")
}
)
我的搜索是这样的:
em.createQuery("FROM X WHERE id = " + id).setHint("javax.persistence.fetchgraph", em.getEntityGraph("cobranca-com-lancamentos-com-filhos")).getSingleResult();
有什么想法吗?
【问题讨论】:
标签: hibernate jpa eager-loading entitygraph