春データJDBCでソフト削除処理する方法は?

デクスター:

春データJDBCでソフト削除を処理する方法の良い方法はありますか?

春データJPAでは、私たちはどちらか追加することができ@Where(clause="is_active=1")、注釈をしたり拡張CrudRepositoryPagingAndSortingRepository

春データJDBCは、クエリでSPELをサポートしていませんので、我々はこのような一般的な方法でそれらを書くカント:

@NoRepositoryBean
public interface SoftDeleteCrudRepository<T extends BasicEntity, ID extends 
Long> extends CrudRepository<T, ID> {
//Override CrudRepository or PagingAndSortingRepository's query method:
@Override
@Transactional(readOnly = true)
@Query("select e from #{#entityName} e where e.deleteFlag=false")
public List<T> findAll();

//Look up deleted entities
@Query("select e from #{#entityName} e where e.deleteFlag=true")
@Transactional(readOnly = true)
public List<T> findAllDeleted(); 

//Soft delete.
@Query("update #{#entityName} e set e.deleteFlag=true where e.id=?1")
@Transactional
@Modifying
public void softDelete(String id);
...
}

だから、拡張CrudRepositoryまたはPagingAndSortingRepository各エンティティ/テーブルに対して各リポジトリに対して同じクエリを記述手段?お気に入り

Repository1
@Override
@Transactional(readOnly = true)
@Query("select id, name, value, deleteFlag from table1 e where e.deleteFlag=false")
public List<T> findAll();
....

Repository2
@Override
@Transactional(readOnly = true)
@Query("select id, name, value, deleteFlag from table2 e where e.deleteFlag=false")
public List<T> findAll();
....

事前に返事をありがとう!

イェンスSchauder:

私は現在、1はこれを実現する方法を3つのオプションを参照してください。

  1. ビューを使用してください。各集計ルートについて、ソフト削除された行アウトフィルタそのデータベース・ビューを作成します。これらのビューに対するあなたのエンティティの地図。

  2. あなた自身を書きますSqlGeneratorとに注入DefaultDataAccessStrategyビアSqlGeneratorSource以来SqlGenerator唯一のパッケージ可視であるあなた自身を作成する必要がありますDefaultDataAccessStrategy、これは基本的には既存のものを複製します。これは、もちろん、それを維持するための長期的なコストが付属しています。

  3. あなたのシナリオのニーズに思えるすべてのエンティティ名のために非常に特別なSPELのサポートであるので、そのための問題を開き、プルリクエストを送信することは現実的な選択肢かもしれません。あなたは、このアプローチに興味があり、より多くの助けを必要とする場合には、問題の説明にそれを言及して。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=190534&siteId=1