2016-12-30 10 views
0

上のカスタムを持つテーブルを結合:JPA基準:私はJPAに新たなんだと私はAPIの基準を使用してこのクエリを作成したい句

SELECT company.* 
FROM company 
LEFT OUTER JOIN address ON company.id = address.company_id AND address.postal_code = '54000' 
ORDER BY company.id; 

検索し、反射した後、私は論理思われる、このコードを試してみました私には:

... 
CriteriaQuery<Company> query = criteriaBuilder.createQuery(Company.class) 
Root<Company> defCompany = query.from(Company.class); 
Join joinAddresses = defCompany.join("addresses", JoinType.LEFT); 
joinAddresses.on(criteriaBuilder.equal(joinAddresses.get("postalCode"), "54000")); 
query.orderBy(criteriaBuilder.asc(defCompany.get("id"))); 
List<Company> companies = entityManager.createQuer(query) 
    .getResultList(); 
... 

しかし、OpenJPAが、このエラーがスローされます。

ERROR OpenEJB- EjbTransactionUtil.handleSystemException: org.apache.openjpa.persistence.criteria.Joins$List.on(Ljavax/persistence/criteria/Expression;)Ljavax/persistence/criteria/Join; 
    java.lang.AbstractMethodError: org.apache.openjpa.persistence.criteria.Joins$List.on(Ljavax/persistence/criteria/Expression;)Ljavax/persistence/criteria/Join; 

私は私がpと思う、誰かが前にこれを実行しようとしました願っていますrobablyしかし私はこれについてのスレッドや質問を見つけることができません。

答えて

1

JOIN ONはJPA 2.1の一部であり、OpenJPAはJPA 2.1を実装していません。

はJPA 2.1実装JPAプロバイダ(例えばDataNucleusのJPA、EclipseLinkは、休止状態)を使用し、や結合を句には使用しないでください(または明確に...かなり同等ではありませんWHERE句でONを置く)

+0

これは、Hibernate 5.2.5で動作します。 https://hibernate.atlassian.net/browse/HHH-2772の世話をしてください。どうもありがとう :) –

関連する問題