論理削除とは
各テーブルに削除フラグを持ち、ビジネスロジック上でのエンティティ削除において、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マッピングしない場合と同様の方法で、おそらく可能。)