2

休止状態のクエリ内で CONCAT_WS を使用して、巨大な文字列を作成し、like '%value%'. 正常に動作しますが、一部のレコードでは一部のフィールドが null です。たとえば、actIdが null の場合、concat_ws 全体が null を返します。理由はわかりませんが、concat_ws は null 値を無視する必要があります。休止状態が 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

その理由は、クエリでの INNER JOIN の暗黙的な使用でした。

子が関連付けられていない親行は選択されません。解決策はLEFT JOINでした

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

于 2018-03-27T05:42:29.867 に答える