Eclipselink扩展了JOIN子句

目前的代码:

CriteriaQuery criteriaQuery = cb.createQuery(MinutisPreke.class); Root from = criteriaQuery.from(MinutisPreke.class); Join ld = from.join("lankomumasDiena", JoinType.LEFT); cb.and(cb.equal(ld.get("intervalas"), 7)); 

生成以下查询:

 SELECT COUNT(t0.pr_id) FROM preke AS t0 LEFT OUTER JOIN lankomumas AS t1 ON (t1.pr_id = t0.pr_id) WHERE (t1.intervalas = 7) 

如何使用条件查询在LEFT OUTER JOIN ON子句中添加语句,以便我的代码生成此查询:

 SELECT COUNT(t0.pr_id) FROM preke AS t0 LEFT OUTER JOIN lankomumas AS t1 ON (t1.pr_id = t0.pr_id) AND (t1.intervalas = 7) 

编辑1:如果您没有看到第一个和第二个查询中的任何差异,请阅读此主题: SQL join:where子句与on子句

EclipseLink在2.5夜间版本中添加了对ON子句的支持,如下所述: https : //bugs.eclipse.org/bugs/show_bug.cgi?id = 367452但它不是JPA规范的一部分,因此您需要将Join转换为EclipseLink的org.eclipse.persistence.internal.jpa.querydef.JoinImpl

 ((JoinImpl)ld).on(cb.and(cb.equal(ld.get("intervalas"), 7));