Hibernate Criteria API:使用自定义连接连接表

3 hibernate join criteria

我问自己是否可以通过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'
Run Code Online (Sandbox Code Playgroud)

好的,除了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))
Run Code Online (Sandbox Code Playgroud)

但这产生了:

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'
Run Code Online (Sandbox Code Playgroud)

这不是我的目的,当然会产生与我期望的查询不同的结果.任何人都可以告诉我如何告诉Hibernate映射到所需的查询?

谢谢,迈克尔

min*_*nus 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;
Run Code Online (Sandbox Code Playgroud)

有一个论坛讨论会帮助你: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();
Run Code Online (Sandbox Code Playgroud)