我有一个与子实体具有OneToMany关系的Parent实体。孩子的ManyToOne是可选的。
在对Child执行查询时,我可以在父项上执行LEFT JOIN FETCH,以在一个查询中获取所有父项。不幸的是,父实体可能会在返回的子集中多次复制,从而增加了大量开销,并对结果进行了编组。
当我调用“child.getParent()”(即没有LEFT JOIN FETCH)和(b)没有检索重复集时,是否有办法执行此查询(a)而不必对每个父进行单独选择如果我做LEFT JOIN FETCH,那么每个父母的数据是什么?
从逻辑上讲,我想做的是:
如果这个不清楚,你需要一些代码,我可以提供。但这是一个非常基本的例子:
@Entity
public class Child ... {
...
@ManyToOne( optional = true, fetch = FetchType.EAGER )
@JoinColumn( name = "parent_id" )
private Parent parent;
...
}
每次我调用“child.getParent()”时,此查询都需要对父进行单独选择:
SELECT c FROM Child c WHERE c.id IN :childIds;
此查询将为结果集中不唯一的每个父项加载重复数据:
SELECT c FROM Child c LEFT JOIN FETCH c.parent WHERE c.id IN :childIds;
谢谢!