我正在重构一些旧代码并偶然发现了这个命名查询(它在 mysql 之上使用休眠):
delete F from
foo F
inner join user DU on F.user_id = DU.id
where
(COALESCE(:userAlternateId,null) is null or DU.alternate_id like :userAlternateId )
and ( COALESCE(:fooId,null) is null or F.foo_id like :fooId )
and (
( COALESCE(:fromUpdated,null) is null or F.updated_at>=:fromUpdated )
and ( COALESCE(:toUpdated,null) is null or F.updated_at<=:toUpdated )
)
我不明白为什么COALESCE
以这种方式使用它:
COALESCE(:userAlternateId,null) is null
这是性能黑客还是它使查询数据库独立或......?
btwuserAlternateId
是字符串/varchar,其他 id 是 long 并且from-to
是日期