2010-02-24 42 views
2

我:HQL可空属性不应该被忽略,有帮助吗?

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

我有以下HQL:

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') , '%')) 

查询的伟大工程,直到f.parent为空。即使f.name或f.value匹配,当f.parent为null时,结果也会被抛出。

所以说我有:返回

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; 

当我搜索 “b” 的仅有B。我希望它,所以a和b被返回。

任何提示?

谢谢!

回答

1

在查询中引用f.parent.name会在父属性上创建隐含的inner join。包括不能参加,因为他们没有父行,你必须明确地使用一个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

感谢您的回答马丁。我正在使用Oracle并得到以下错误: ORA-00918:列模糊定义 是否有解决方法? 感谢您的帮助! – KyleT 2010-02-25 16:56:13