CriteriaBuilder 使用自定义条件连接两个表

CriteriaBuilder join two tables with a custom condition

我想写这个SQL查询

SELECT *  
FROM A
LEFT OUTER JOIN B
ON A.IDRESOURCE=B.IDRESOURCE AND B.IDLANGUAGE=22;

使用 JPA 条件生成器。 我简单地写了连接的第一部分:

CriteriaQuery<A> searchQuery = criteriaBuilder.createQuery(A.class);
Root<A> aRoot = searchQuery.from(A.class);
Join<A, B> bJoin= aRoot.join("mappedB", JoinType.LEFT);

但是我不知道如何实现条件 B.IDLANGUAGE=22.

有没有什么方法可以在 Criteria Builder 中完成此操作?

使用whereCriteriaBuilder.equal

em.select(aRoot).where( criteriaBuilder.equal(bJoin.get("IdLanguage"), 22));

使用JPA 2.1 ONJOIN部分指定,与WHERE[=]相同14=]

CriteriaQuery<A> searchQuery = criteriaBuilder.createQuery(A.class);
Root<A> aRoot = searchQuery.from(A.class);
Join<A, B> bJoin= aRoot.join("mappedB", JoinType.LEFT);
bJoin.on(criteriaBuilder.equal(bJoin.get("idLanguage"), 22));