休眠 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 " +
等...
即使 actItemId
或 actId
现在是 null
,
CONCAT_WS 忽略它并将其他字段粘合在一起。
感谢 Vlad Mihalcea https://discourse.hibernate.org/t/concat-ws-like-value/428
我在休眠查询中使用 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 " +
等...
即使 actItemId
或 actId
现在是 null
,
CONCAT_WS 忽略它并将其他字段粘合在一起。
感谢 Vlad Mihalcea https://discourse.hibernate.org/t/concat-ws-like-value/428