如何在HQL中替换(或获取null值的结果)null值?在我的例子中,SomeObject
可以为null。我在Clazz
和SomeObject
:
SELECT c.name, c.someObject.name from Clazz c
我试过了:
SELECT c.name, coalesce(c.someObject.name, ' ') from Clazz c
但它不会返回任何行。
答案 0 :(得分:2)
您可能需要注意,没有“多到空”的关系。如果引用对象(SomeObject
)为null
,则持久化Clazz
实体 no 条目将进入SomeObject
数据库表。
然后,当您尝试访问查询(SomeObject
)中的(不存在的)c.someObject.name
时,Hibernate将隐式构建内部连接,当然这将是排除有问题的Clazz
对象,因为无法实现联接。
尝试明确使用outer join;这将解决您的问题。
顺便说一句:您可以让hibernate output生成它生成的SQL语句,这样可以更好地理解给定查询以某种方式运行的原因。
答案 1 :(得分:0)
c.someObject.name
是Clazz和SomeObject之间的隐式内部联接。因此,由于它是一个内连接,它会自动过滤掉具有null
someObject的Clazz实例。
您需要外部联接:
select c.name, s.name from Clazz c
left join c.someObject s