2010-02-05 10 views
21

Quiero realizar una UNIÓN EXTERIOR IZQUIERDA entre dos tablas usando la API de Criteria. Todo lo que pude encontrar en la documentación de Hibernate es este método:(Lazy) UNIÓN EXTERIOR IZQUIERDA usando la API de criterios de Hibernate

Criteria criteria = this.crudService 
      .initializeCriteria(Applicant.class) 
      .setFetchMode("products", FetchMode.JOIN) 
      .createAlias("products", "product"); 

Sin embargo, esto o bien realiza una combinación interna o unirse a una combinación externa derecha, debido a la cantidad de resultados que devuelve.

También quiero que mi unión sea Lazy. ¿Cómo puedo hacer esto?

¡Salud!

ACTUALIZACIÓN: Parece que usar alias hace que la unión INNER JOIN se una automáticamente. Hay algo en la "historia de fondo" que aún no he captado. Entonces, no hay alias hoy. Esto me deja el problema de aplicar restricciones a las dos tablas, porque ambas tienen una columna (o propiedad, si es más apropiado) 'nombre'.

+2

aceptar la respuesta ya. –

+0

Quiero saber su referencia de "createAlia() en Hibernate por defecto crea una UNIÓN INTERNA". He buscado API y no puedo verla. Gracias. – FaithReaper

Respuesta

0

Una unión está en la solicitud SQL. No puede ser flojo.


con Hibernate, para recuperar perezosamente estos datos, simplemente excluye de la solicitud HQL. Luego, cuando acceda a los captadores de su entidad (si su sesión aún está abierta), se cargará automáticamente (no es necesario que escriba esa parte de la solicitud).

+0

Lo siento, no entendí esto. Tal vez debería reformular: quiero tener una UNIÓN EXTERIOR IZQUIERDA, pero también quiero que los datos sean realmente recuperados solo cuando sea necesario (se llama al getter apropiado). ¿La pereza (o entusiasmo) de alguna manera está relacionada con el tipo de SQL JOIN que tiene lugar? –

+0

La pereza puede realizarse con objetos, pero no con una solicitud de SQL. Una solicitud se ejecuta una vez completamente, no está diseñada para que parte de la solicitud se ejecute más tarde si es necesario. – KLE

+0

En HQL escribo LEFT OUTER JOIN FETCH. Entonces, presumiblemente una consulta HQL corresponde a muchas SQL, que se ejecutan cuando es necesario? De todos modos, perezosamente o no, ¿cómo puedo hacer una UNIÓN EXTERIOR IZQUIERDA? Y no en HQL, usando la API de Criteria. ¡Aclamaciones! –

34

Si tiene que unirse a la izquierda sobre la mesa productos simplemente hacer:

..... createAlias ​​("productos", "producto", Criteria.LEFT_JOIN);

+0

gracias muy simples y útiles, mucho! – Sllouyssgort

+1

Desaprobados ahora, el uso de Ankit respuesta – jlars62

20

API de Sdavids answer es deprecated ahora. Su versión actualizada es

.... createAlias ​​("empleado", "EMP", JoinType.LEFT_OUTER_JOIN)

+0

Gracias. Me ayuda a eliminar el uso de API obsoleta –

Cuestiones relacionadas