Hibernate concat_ws和null fielnds

时间:2018-03-20 11:38:32

标签: java mysql hibernate concat-ws

我在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%'

谢谢!

2 个答案:

答案 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        "  +
等等......

即使actItemIdactId现在是null, CONCAT_WS忽略它并将其他字段粘合在一起。

感谢Vlad Mihalcea https://discourse.hibernate.org/t/concat-ws-like-value/428