hibernate 标准 API : Joining tables with custom join

标签 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'

好吧,除了和b.any_column = 'my_value'之外的一切对我来说都不难。使用 FetchMode.JOIN 或 addCriteria(...,...)。

但是和 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 映射到所需的查询?

谢谢, 迈克尔

最佳答案

您可能需要使用 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();

关于 hibernate 标准 API : Joining tables with custom join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12078960/

相关文章:

mysql - 从 mysql 连接查询返回不同的空记录

用于计算 ID 数并在日期范围内为空时显示 0 的 SQL 查询

mysql - SQL 连接 3 个表,按最新的组值分组

java - 即使表数据退出,Hibernate Session 也返回 null

java - 如何在 Java 中将 List<Object> 转换为 List<Dog>

sql - jpa 对子类的连接查询

java - 在java中配置mysql url

mysql - jpa 标准按聚合值分组

java - 我可以调用具有 hibernate 条件的存储过程吗?

java - 如何为以下查询创建 jpa 规范或条件查询的谓词