2011-08-30 4 views
6

J'ai la suivante à une relation dans Hibernate (qui pourrait être null):HQL avec chèque nul pour un à une relation

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

J'essaie de sélectionner toutes les entités qui ont non -null détails avec HQL:

from Entity e where e.details is not null 

mais cela retourne toutes les entités, peu importe si les détails sont nuls ou non.

Que serait alors un HQL correct?

Répondre

5

Ok j'ai trouvé la solution:

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

Pour mon cas, j'ai trouvé que j'avais juste besoin de ceci: select e de Entity e join e.details Parce qu'il va générer une "jointure interne" en SQL, et il ne renverra pas de résultats s'il n'y a pas de détails. –

1

Supposons que cette relation un-à-un fasse partie du mappage de la table herpderp, donc l'entité herpderp possède la propriété details. Voulez-vous dire que la requête renvoie les enregistrements herpderp dans lesquels le champ herpderp.details est null?

Ou voulez-vous dire quelque chose comme ça?

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

Je veux dire retourne 'ces enregistrements herpderp où le champ est herpderp.details null'. Votre HQL fonctionne, mais le problème est que tous les champs à l'intérieur des détails peuvent être nuls, donc je ne peux pas vraiment compter sur eux. Si j'essaie de vérifier l'index primaire: 'e.details.id n'est pas nul', il retourne tout (ce qui est très étrange). – serg

1

Vous pouvez également utiliser le plus probablement la fonction elements HQL.

Dans la section des expressions de HQL 3.3 Documentation

from Cat cat where exists elements(cat.kittens) 

qui devrait se traduire à votre requête comme

Select Entity e where exists elements(e.details) 
Questions connexes