在JPQL中可以写:
select c from Car c where coalesce(c.wheels, 4) = 4
或者,如果您更喜欢使用螺栓,
select c from Car c where coalesce(c.wheels * c.bolts, 20) = 20
但是,如果我尝试类似
的话select c from Car c where coalesce(c.wheels = 20, true)
它会失败。 Hibernate日志显示空的coalesce()或"意外的AST节点"错误。
当然,这是一个合成的例子;我的代码使用带有subselect的复杂表达式,不能以其他方式轻松编写。 CASE也不起作用。我想知道有没有办法在coalesce中编写逻辑表达式?
更新
最后一个例子不起作用,因为必须存在比较(= true)
这适用于(布尔字段):
select c from Car c where coalesce(c.tested, false) = true
这不起作用(布尔表达式):
select c from Car c where coalesce(c.wheels = 20, true) = true