Hibernate,在hql中替换null值

时间:2012-12-17 19:31:51

标签: java hibernate null hql

如何在HQL中替换(或获取null值的结果)null值?在我的例子中,SomeObject可以为null。我在ClazzSomeObject

之间存在多对一关系
SELECT c.name, c.someObject.name from Clazz c

我试过了:

SELECT c.name, coalesce(c.someObject.name, ' ') from Clazz c 

但它不会返回任何行。

2 个答案:

答案 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