2011-08-30 27 views
6

que tiene la siguiente uno-a-uno relación en Hibernate (que puede ser nulo):HQL con cheque nulo para uno-a-uno relación

<one-to-one name="details" class="com.example.Details" lazy="false" cascade="all"/> 

estoy tratando de seleccionar todas las entidades que tienen no -null detalles con HQL:

from Entity e where e.details is not null 

pero esto devuelve todas las entidades, sin importar si los detalles son nulos o no.

¿Qué sería entonces una HQL correcta?

Respuesta

5

Ok he encontrado la solución:

select e from Entity e join e.details d where d is not null 
+0

Para mi caso, encontré que solo necesito esto: seleccione e de Entity e join e.details Porque generará una "unión interna" en SQL, y no devolverá resultados si no hay detalles. –

1

Supongamos que esta relación uno-a-uno es parte del mapeo de la tabla herpderp, por lo tanto, la entidad herpderp tiene la propiedad de detalles.

¿Quiere decir que la consulta devuelve esos registros herpderp donde el campo herpderp.details es nulo?

¿O quieres decir algo como esto?

from Entity e where e.details.someDetailsField is not null 
+0

quiero decir 'devuelve aquellos registros donde el campo herpderp herpderp.details es null'. Su HQL funciona, pero el problema es que todos los campos dentro de los detalles pueden ser nulos, por lo que realmente no puedo confiar en ellos. Si trato de verificar el índice primario: 'e.details.id no es nulo', de nuevo devuelve todo (lo cual es muy extraño). – serg

1

También puede hacer más probable es que utilice la función de HQL elements.

Desde la sección Expresiones de HQL 3.3 Documentation

from Cat cat where exists elements(cat.kittens) 

que debería traducirse a su consulta lo

Select Entity e where exists elements(e.details)