我在hibernate查询中使用CONCAT_WS,
创建一个巨大的字符串,并使用like '%value%'
按所有字段进行搜索。它工作正常,但对于某些记录,某些字段为空。例如,如果actId
为null,则我的整个concat_ws返回null。我不知道为什么,concat_ws必须忽略空值。可能是因为hibernate尝试从null调用getActNumber?无论如何,我都在努力解决这个问题。
where CONCAT_WS("_", actItemId.actId.actNumber, DATE_FORMAT(recordDate, '%d.%m.%Y'), actItemId.techniqueId.name, fzkActNumber, ....etc) like '%value%'
谢谢!
答案 0 :(得分:0)
CONCAT_WS()
按设计运作。
如果你希望它工作,即使某些args为NULL,也可以这样做,将每个可能的NULL arg转换为空格。
CONCAT_WS('_', IFNULL(cola,''), IFNULL(colb,'') ...)
答案 1 :(得分:0)
原因是在我的查询中隐含使用了INNER JOIN。
它不会选择没有关联子项的任何父行。 解决方案是LEFT JOINs
select distinct(t) from InvBook as t +
"left join t.actItemId as actItem " +
"left join t.actItemId.actId as act " +
等等......
即使actItemId
或actId
现在是null
,
CONCAT_WS忽略它并将其他字段粘合在一起。
感谢Vlad Mihalcea https://discourse.hibernate.org/t/concat-ws-like-value/428