2016-04-04 10 views
0

ich diese SQL-Abfrage schreiben will BuilderCriteriaBuilder verbindet zwei Tabellen mit einer benutzerdefinierten Bedingung

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

mit dem JPA Kriterien. Ich schrieb den ersten Teil des Join einfach mit:

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

aber ich weiß nicht, wie die Bedingung B.IDLANGUAGE = 22 zu implementieren.

Gibt es eine Möglichkeit, dies in Criteria Builder zu erreichen?

Antwort

3

Verwenden JPA 2.1 ON angeben es im JOIN Teil, der nicht die gleichen wie in dem 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)); 
0

Verwenden Sie where und CriteriaBuilder.equal.

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

Hallo @Nicholas ist. Funktioniert der EM nach dem Beitritt? Mein Problem ist, dass die Bedingung als eine Join-Bedingung ausgeführt werden muss, nicht als eine wo. – gvdm

+0

Sollte tun, ich habe diese Menge verwendet. Es kennt den Join, weil Sie 'bJoin' in der where-Klausel verwenden. –

Verwandte Themen