S2Daoの論理削除関連

論理削除とは

各テーブルに削除フラグを持ち、ビジネスロジック上でのエンティティ削除において、DELETE文を発行せず、削除フラグを真にするUPDATE文を発行することをいう。SELECT文を発行する際には、暗黙的にWHERE句に削除フラグが偽のもののみを取得する条件を付加することで、ビジネスロジック上ではそのエンティティが削除されたものとして扱われる。

論理削除のポイント

  • 削除メソッドを実行したら、削除フラグを真にするUPDATE文が発行される。
  • SELECT文を実行する際に、削除フラグが偽のもののみを取得するようにする。

S2Daoでの対応

機能として用意されていない。
サンプルプロジェクトにおいて、S2DelFlagなるものが配布されているが、これはUPDATE文の対応を可能にするが、SELECT文には関与しない。
よって、独自実装で対応しなければならない。

独自実装の方法:N:1マッピングしない場合

UPDATE対応は、EntityManagerを使用するためのimplクラスで、deleteメソッドが削除フラグを真にしてupdateメソッドを呼ぶようにオーバーライドする。
SELECT対応は、QWERYアノテーションを使うか、implクラスでWHERE句を付ける。

独自実装の方法:N:1マッピングする場合

UPDATE対応は不要。(親子もろとも論理削除することは考えない)
SELECT対応は、S2DaoのN:1マッピングは、1側に対して関連KEY以外の検索条件が指定できないため、1側の削除フラグ対応が出来ない。(逆に、N側には検索条件が指定できるため、削除フラグ対応もN:1マッピングしない場合と同様の方法で、おそらく可能。)

この記事を書いた人

井上 研一

株式会社ビビンコ代表取締役、ITエンジニア/経済産業省推進資格ITコーディネータ。AI・IoTに強いITコーディネータとして活動。画像認識モデルを活用したアプリや、生成AIを業務に組み込むためのサービス「Gen2Go」の開発などを行っている。近著に「使ってわかった AWSのAI」、「ワトソンで体感する人工知能」。日本全国でセミナー・研修講師としての登壇も多数。