【问题标题】:Hibernate Criteria API: Joining tables with custom joinHibernate Criteria API:使用自定义连接连接表
【发布时间】:2012-08-18 05:18:24
【问题描述】:

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

谢谢, 迈克尔

【问题讨论】:

    标签: hibernate join criteria


    【解决方案1】:

    您可能需要使用 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 3.2,需要评估迁移。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 2013-05-27
    • 2011-08-30
    • 2012-04-09
    • 2017-07-20
    • 2011-01-16
    • 2023-03-19
    相关资源
    最近更新 更多