JPA Criteria API:LEFT JOIN上的多个条件

时间:2012-06-18 11:34:38

标签: jpa left-join criteria-api

我有一个像下面这样的连接引用,第一个连接表达式由JPA API自动构建。

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Tuple> c = cb.createTupleQuery();
Root<Demand> demands = c.from(Demand.class);
Join<Demand, Metadata> joinMetadata = demands.join("metadatas", JoinType.LEFT);

但是,我想为我的joinMetadata添加一个aditional条件,比如Metadata.type =“AFFECTATION_KEY”,但我不知道如何。

非常感谢您的帮助

2 个答案:

答案 0 :(得分:11)

JPA始终只通过映射连接列加入。 JPA 2.0不支持ON子句,但2.1草案确实有这种支持。

EclipseLink 2.4支持ON子句,

请参阅, http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#ON

也可以通过Criteria API,使用提供on子句支持的EclipseLink native Expression API,

请参阅, http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/Criteria#JpaCriteriaBuilder_and_EclipseLink_Extensions

答案 1 :(得分:7)

Hibernate的Criteria API版本3.6也支持它:

    Criteria c = session.createCriteria(Tuple.class);

    c.createAlias("demands", "d")
    .createAlias("d.metadata", "m", 
        Criteria.LEFT_JOIN, Restrictions.eq("m.type", "AFFECTATION_KEY"));

或者你可能想要最后一位的Restrictions.eqProperty()。请注意使用第四个参数的不受欢迎的createAlias()版本。以下是文档中的引用

参数:

  • associationPath - 点分隔的属性路径
  • alias - 分配给已连接关联的别名(供以后参考)。
  • joinType - 要使用的联接类型。
  • withClause - 要添加到连接条件的条件(ON子句)

Hibernate API 3.6