2017-06-14 5 views
0

QueryDslを使用してフィールドをNULL値で更新する際に問題が発生しました。例えばQueryDSL:SQLUpdateClauseの背後にある根拠はデフォルトでNULLを無視します

次のコード:

entity.setText(null); 
new SQLUpdateClause(connection, templates, QEntity) 
    .where(...) 
    .populate(entity) 
    .execute(); 

は黙って「テキスト」フィールドの更新を無視します。

entity.setText(null); 
new SQLUpdateClause(connection, templates, QEntity) 
    .where(...) 
    .populate(entity, DefaultMapper.WITH_NULL_BINDINGS) 
    .execute(); 

これは夫婦の問題発生します:

  • サイレントバグを:マッパーを更新するために忘れることにつながることができ、私は適切にnull値を設定する方法を考え出すコードで掘り

    更新プログラムが例外をスローしないため、後で見つけにくいバグです。

  • APIの複製:互換性を維持するために、既存のupdateEntity APIに「updateNulls」フラグを追加する必要があります。

デフォルトで更新nullを無視するかどうかの根拠は何ですか? Exceptionをスローすると、Exiting APIが破損しますか?

答えて

0

これは、挿入文では本当に簡単です。

更新を処理するときは、元のレコードを取得し、必要な変更を行い、DefaultMapper.WITH_NULL_BINDINGSを使用して変更されたレコードをアップアップします。

関連する問題