CriteriaBuilder unir dos tablas con una condición

Quiero escribir esta consulta SQL

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

con la JPA Criterios Generador.
Escribí la primera parte de la combinación simplemente con:

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

pero no sé cómo poner en práctica la condición B. IDLANGUAGE=22.

Hay alguna forma de lograr esto en los Criterios de Generador?

OriginalEl autor gvdm | 2016-04-04

2 Kommentare

  1. 3

    Usar JPA 2.1 ON a especificar en el JOIN parte, que es no el mismo que en el 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));
    lo que si me wan para añadir una condición más para un campo de Una tabla en el mismo SQL?

    OriginalEl autor Neil Stockton

  2. -1

    Uso where y CriteriaBuilder.equal.

    em.select(aRoot).where( criteriaBuilder.equal(bJoin.get("IdLanguage"), 22));
    Hola @Nicholas. ¿La EM es Donde trabajo después de la combinación? Mi problema es que la condición debe ser ejecutado como una condición de combinación, no como una donde contition
    Debe de hacer, la he usado un montón. Se sabe que la combinación porque usted está usando bJoin en la cláusula where.

    OriginalEl autor K.Nicholas

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea