休眠 concat_ws 和空字段

Hibernate concat_ws and null fielnds

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

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

谢谢!

CONCAT_WS() 正在按设计运行。

如果您希望它在某些参数为 NULL 时也能正常工作,请执行类似的操作将每个 possibly-NULL 参数转换为 space。

CONCAT_WS('_',  IFNULL(cola,''), IFNULL(colb,'') ...)

原因是在我的查询中隐式使用了 INNER JOIN。

它不会 select 任何没有关联子行的父行。 解决方案是 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