【问题标题】:Hibernate concat_ws and null fielnds休眠 concat_ws 和空字段
【发布时间】:2018-03-20 11:38:31
【问题描述】:

我在休眠查询中使用 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%'

谢谢!

【问题讨论】:

    标签: java mysql hibernate concat-ws


    【解决方案1】:

    CONCAT_WS() 正在按设计运行。

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

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

    【讨论】:

    • 我尝试了 IFNULL, CASE 时 IF(condition?, true, false) 没有任何效果。我想我需要在获取 actNumber 之前检查 actId 是否为空。
    【解决方案2】:

    原因是我的查询中隐式使用了 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 忽略它并将其他字段粘合在一起。

    感谢弗拉德米哈尔恰https://discourse.hibernate.org/t/concat-ws-like-value/428

    【讨论】:

      猜你喜欢
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多