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

yes*_*sil 6 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);
Run Code Online (Sandbox Code Playgroud)

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

非常感谢任何帮助

Jam*_*mes 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,使用提供子句支持的EclipseLink 本机 Expression API on,

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


car*_*tax 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"));
Run Code Online (Sandbox Code Playgroud)

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

参数:

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

Hibernate API 3.6