2010-02-24 4 views
2

J'ai:La propriété nullable HQL ne doit pas être ignorée, aide?

Class Foo 
{ 
String name; 
String value; 
Foo parent; //Foo.parent is OneToOne and nullable 
} 

Je l'HQL suivante:

FROM Foo f WHERE 
(lower(f.name) like concat(lower('string') , '%')) or 
(lower(f.value) like concat(lower('string') , '%')) or 
(lower(f.parent.name) like concat(lower('string') , '%')) 

La requête fonctionne très bien jusqu'à ce que f.parent est nulle. Même si f.name ou f.value correspond, lorsque f.parent est nul, le résultat est rejeté.

dire J'ai:

Foo a = new Foo(); 
a.name = "bob"; 
a.value = "chris"; 
a.parent = null; 

Foo b = new Foo(); 
b.name = "Bob"; 
b.value="Chris"; 
b.parent = a; 

Quand je recherche "b" que b est retourné. J'aimerais bien que a et b soient retournés.

Des conseils?

Merci!

Répondre

1

Référencer f.parent.name dans votre requête crée un inner join implicite sur la propriété parent. Pour inclure les lignes qui ne peuvent être jointes parce qu'ils ont pas de parent, vous devez utiliser explicitement une place left outer join:

from Foo f 
left outer join f.parent as p 
where 
(lower(f.name) like concat(lower('string') , '%')) or 
(lower(f.value) like concat(lower('string') , '%')) or 
(lower(p.name) like concat(lower('string') , '%')) 

Related HQL documentation

+0

Merci pour la réponse Martin. J'utilise Oracle et obtient l'erreur suivante: ORA-00918: colonne ambiguë définie Y at-il un moyen de contourner cela? Merci pour l'aide! – KyleT

Questions connexes