2

我在休眠查询中使用 CONCAT_WS 来创建一个巨大的字符串并使用like '%value%'. 它工作正常,但对于某些记录,某些字段为空。例如,如果actId为空,我的整个 concat_ws 返回空。我不知道为什么, concat_ws 必须忽略空值。可能是因为hibernate试图从null调用getActNumber?无论如何,我正在努力解决这个问题。

  where CONCAT_WS("_", actItemId.actId.actNumber, DATE_FORMAT(recordDate, '%d.%m.%Y'), actItemId.techniqueId.name, fzkActNumber, ....etc) like '%value%'

谢谢!

4

2 回答 2

0

CONCAT_WS()正在按设计运行。

如果您希望它在某些 args 为 NULL 时也能正常工作,请执行以下操作将每个可能为 NULL 的 arg 转换为空格。

CONCAT_WS('_',  IFNULL(cola,''), IFNULL(colb,'') ...)
于 2018-03-20T12:03:13.043 回答
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        "  +

ETC...

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

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

于 2018-03-27T05:42:29.867 回答