Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
如何在 HQL 中替换(或使用空值获取结果)空值?在我的情况下,SomeObject可以为空。Clazz我在和之间有多对一的关系SomeObject:
SomeObject
Clazz
SELECT c.name, c.someObject.name from Clazz c
我试过了:
SELECT c.name, coalesce(c.someObject.name, ' ') from Clazz c
但它不返回任何行。
您可能要注意,没有“多对空”关系之类的东西。如果引用的对象 ( SomeObject) 是null在持久化Clazz实体时,则不会在SomeObject数据库表中创建条目。
null
然后,当您尝试访问SomeObject查询中的(不存在的)(c.someObject.name)时,Hibernate 将隐式构建一个内部连接,这当然会排除有Clazz问题的对象,因为无法完成连接。
c.someObject.name
尝试显式使用外连接;这将解决您的问题。
顺便说一句:您可以让 hibernate输出它生成的 SQL 语句,这样可以更好地理解给定查询以某种方式运行的原因。
c.someObject.name是 Clazz 和 SomeObject 之间的隐式内部连接。因此,由于它是一个内连接,它会自动过滤掉具有nullsomeObject 的 Clazz 实例。
你需要一个外连接:
select c.name, s.name from Clazz c left join c.someObject s