hql - 如何在获取父项时填充子实体的延迟集合

时间:2011-11-08 17:19:00

标签: hibernate jpql

假设我有@Entity A,它对@Entity B有一个急切的@ManyToOne,并且这个B对一个名为“images”的集合有一个懒惰的(默认)@OneToMany

我想做类似的事情:

"select a from A a join fetch a.b.images where a.b = :b"

这是一个查找给定B实例的A实例的查询(A - > B链接是A的单向)。 尝试类似于上述方法的东西让我有一个休眠异常:

query specified join fetching, but the owner of the fetched association was not present in the select list

但尝试类似

的内容
"select a, a.b.images from ..."

将为A的每个实例返回多个结果(乘以图像数量)

如何在填充a.b.images的A上编写查询?

1 个答案:

答案 0 :(得分:1)

试试这个 - 你首先需要加入fetch a.b分配一个别名,然后加入fetch alias.images。查看docs了解更多详情。如果a.b和b.images都是一对多的话,这样做不是一个好主意 - 它会导致结果集爆炸。批量大小或子选择之类的东西将是更好的优化方式。

"select a from A a join fetch a.b x join fetch x.images where a.b = :b"