假设我有@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上编写查询?
答案 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"