2012-08-22 81 views
3

我問自己,如果下面的查詢可以由Hibernate API標準Hibernate的標準API:使用自定義連接表加入

SELECT * FROM table_a as a LEFT OUTER JOIN table_b as b ON a.primary_key = b.foreign_key and b.any_column = 'my_value' 

好的映射,除了and b.any_column = 'my_value'一切都沒有爲難我。使用FetchMode.JOIN或addCriteria(...,...)。

and b.any_column = 'my_value'正在產生頭痛。

我試圖與嵌入:

addCriteria("b", Criteria.LEFT_JOIN).add(Restriction.eq("b.any_column", my_value)) 

但是,這是生產:

SELECT * FROM table_a as a LEFT OUTER JOIN table_b as b ON a.primary_key = b.foreign_key WHERE b.any_column = 'my_value' 

這不是我的目的,當然是生產則不同的結果,我預計查詢。任何人都可以給我一個提示,告訴Hibernate如何映射到所需的查詢?

感謝, 邁克爾

回答

5

你可能會需要使用createAlias或個createCriteria方法。

public Criteria createAlias(String associationPath, String alias, int joinType, Criterion withClause) throws HibernateException; 

public Criteria createCriteria(String associationPath, String alias, int joinType, Criterion withClause) throws HibernateException; 

有一個論壇的討論,這將有助於你:https://hibernate.onjira.com/browse/HHH-2308

例如:

Criteria criteria = getSession().createCriteria(Table_a.class); 
criteria.addAlias("Table_b","joined_alias",CriteriaSpecification.LEFT_JOIN); 
criteria.list(); 
+0

謝謝,這看起來像一個解決方案:)可悲的是,我們仍然在使用Hibernate 3.2和必要性評估遷移。 – miwoe