CriteriaBuilder连接两个具有自定义条件的表

gvd*_*vdm 2 java jpa criteria-api

我想写这个SQL查询

SELECT *  
FROM A
LEFT OUTER JOIN B
ON A.IDRESOURCE=B.IDRESOURCE AND B.IDLANGUAGE=22;
Run Code Online (Sandbox Code Playgroud)

使用JPA Criteria Builder。我使用以下代码编写了连接的第一部分:

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

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

在Criteria Builder中有什么方法可以做到这一点?

Nei*_*ton 5

使用JPA 2.1 ON在指定它JOIN的一部分,这是一样的WHERE

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));
Run Code Online (Sandbox Code Playgroud)