2016-12-30 81 views
0

我是新來的JPA加入表自定義,我想使用API​​標準,以創建這個查詢:JPA標準:草案第

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可以,但我找不到關於此的線索或問題。

回答

1

JOIN ON是JPA 2.1的一部分,並且OpenJPA沒有實現JPA 2.1。

使用實現JPA 2.1 JPA提供商(如DataNucleus將JPA,的EclipseLink,休眠),或使用連接沒有ON子句使用(或將ON WHERE子句中......不太清楚當量)

+0

這就是它與Hibernate 5.2.5一起使用。照顧https://hibernate.atlassian.net/browse/HHH-2772。非常感謝 :) –