我有一个复杂的JPA / Hibernate问题。 我有两个实体A和B.一个参考B,但不需要这种关系。
public class A {
@JoinColumn(name = "b_id", referencedColumnName = "b_id")
@OneToOne
private B b;
}
我写SELECT NEW dto(a.b) FROM A a
这会产生内连接,这对我不利,因为a.b可以为null,我想要所有的A entites。所以我像这样重写我的查询:SELECT NEW dto(b) FROM A a LEFT JOIN B b
我们必须使用别名(b)来阻止内连接并只获得外连接。好的,我得到所有的线,但我得到额外的查询,Hibernate为所有B实体生成SELECT查询。为什么,我怎么能阻止这个,我使用左连接,因为我只想要一个查询。
修改
内部联接的同样问题。如果使用SELECT NEW dto(a.b) FROM A a
其他SELECT b FROM B b WHERE b.id = ?
,则如果我致电SELECT NEW dto(a.b.id) FROM A a
,则无法选择其他{{1}}。
EDIT2:
这与我的问题完全相同:Same problem, without possible solution.
因为我没有加载父对象本身,所以Hibernate不会急切加载B ...
答案 0 :(得分:1)
你想要从A引用的B,因为你使用的是hql:
SELECT NEW dto(b) FROM A a LEFT JOIN a.b b
答案 1 :(得分:0)
现在我知道导致问题的原因了,我也知道解决方案。
部分 解决方案是使用hibernate的setResultTransformer
方法。不幸的是,JPA不支持它......