JPA 条件:加入 table 和自定义 on 子句
JPA criteria: Join table with custom on clause
我是 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;
我希望以前有人尝试过这样做,我想可能是这样,但我找不到关于此的话题或问题。
JOIN ON
是 JPA 2.1 的一部分,OpenJPA 不实现 JPA 2.1。
使用实现 JPA 2.1 的 JPA 提供程序(例如 DataNucleus JPA、EclipseLink、Hibernate),或者不要将 ON 子句与 JOIN 一起使用(或者将 ON 放在 WHERE 子句中……不太清楚)
我是 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;
我希望以前有人尝试过这样做,我想可能是这样,但我找不到关于此的话题或问题。
JOIN ON
是 JPA 2.1 的一部分,OpenJPA 不实现 JPA 2.1。
使用实现 JPA 2.1 的 JPA 提供程序(例如 DataNucleus JPA、EclipseLink、Hibernate),或者不要将 ON 子句与 JOIN 一起使用(或者将 ON 放在 WHERE 子句中……不太清楚)