2012-05-31 34 views
0

連接兩個表我有兩個其相關的表:標準使用一個以上的參數

+-----------+   +----------+ 
| First | *  1 | Second | 
+-----------+ --------- +----------+ 
| fk_Second |   | id  | 
| version |   | ...  | 
| ...  |   | y  | 
| x   |   +----------+ 
+-----------+ 

Hibernate有一個ManyToOne定義從FirstSecond{fk_Second, version}First表的composite-id(儘管我不認爲它在這種情況下是相關的)。

我想寫標準調用,這在SQL就像爲:

SELECT * FROM First WHERE 
    First.fk_Second = Second.id AND 
    First.x = Second.y 

我發現在產生最後一位麻煩 - 額外的連接條件。

Criteria c = session.createCriteria(First.class); 
    .createCriteria("second", "join_between_first_and_second") 
    .add(Restrictions.eqProperty("y", "x") // <- fails: "x" is not found 

我不能在這種情況下使用HQL查詢。有什麼不同的方式來寫這個嗎?這可以寫避免子查詢/ DetachedCriteria

回答

1
Criteria c = session.createCriteria(First.class, "first"); 
c.createAlias("first.second", "theSecond"); 
c.add(Restrictions.eqProperty("first.x", "theSecond.y"); 

如果你不預置的別名你的財產,財產被認爲是標準的根實體的一部分(第一在這種情況下)。

0

嘗試HQL 「與」條款..

SELECT f.* FROM First f left join Second s ON f.fk_Second = s.id with f.x = s.y; 
+0

謝謝,但我已經有了用HQL編寫的,我需要遷移到Criteria。我在我的問題中提到我不需要HQL解決方案。 – mindas

相關問題