我偶然發現了Hibernate的一個問題。我有2個實體 - 假設A和B像這樣(實體/表註釋中省略):通過嵌套實體字段進行冬眠命令,可能爲空值
class A {
@ManyToOne
@JoinColumn(name = "b_id")
private B b;
}
class B {
@Column(name = "name")
private String name;
}
現在,我想查詢所有一個實體和名場的命令他們乙的實體,像這樣:
SELECT q FROM A AS q ORDER BY q.b.name asc nulls last
的問題是,有行中甲的表具有空的外鍵(b爲null) - 在再前面提到的查詢返回只有行不包含在b字段,並且我想要它們全部。
我猜hibernate加入表而不使用LEFT JOIN(OUTER JOIN?),導致空值被跳過。
有什麼方法可以改變這種行爲嗎?如果我可以通過在實體類中使用註釋來解決它,那將是非常好的,因爲查詢生成機制非常封閉。
你是什麼意思*查詢生成機制相當鎖定*? – 2014-08-27 13:43:10
這是非常通用的,在這裏我得到了有史以來所有查詢的0.001%發生的特殊情況。 – Marcin 2014-08-27 13:57:34