是否有可能定製查詢,休眠時執行檢索給定實體的關聯?更具體地說,我想爲join子句添加一個額外的條件來迎合我正在使用的遺留數據庫中的設計缺陷。自定義加入子句休眠多對一
我面臨的問題在下面。爲表的主密鑰B包含2個字段,類別id
和value_id
的。然而,在表一我只有存儲value_id
並假定該類別ID是硬編碼:
@Entity
@Table(name = "table_a")
public class A {
@ManyToOne
@JoinColumn(name = "b_id")
private B b;
}
@Entity
@Table(name = "table_b")
public class B {
@Id
private int id;
}
當查詢A的情況下,休眠生成以下連接語句:
SELECT *
FROM table_a a LEFT OUTER JOIN table_b b
ON a_.b_id = b_.value_id
而他們詢問我需要它來執行是:
SELECT *
FROM table_a a LEFT OUTER JOIN table_b b
ON a_.b_id = b_.value_id
AND b.category_id = 2
我知道我可以使用視圖來禾rk圍繞這個問題,但是它會要求我創建大約70個視圖,如果可能的話我想避免這些視圖。
謝謝您的答覆。不幸的是,這個問題涉及單向關係,因此您建議的解決方案不適用。是不是可以使用JoinColumnOrFormulas?我已經嘗試使用JoinColumn的組合來指定類和JoinFormula之間的關係,以指定其他連接條件,但這隻會導致錯誤。 – gurrie
也許是一個本地查詢。 –