4

我问自己是否可以通过 Hibernate Criteria 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 映射到所需的查询?

谢谢,迈克尔

4

1 回答 1

6

您可能需要使用 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();
于 2012-08-22T19:12:18.527 回答