2016-08-09 4 views
0

最近私は@Where注釈があることを知り、私は@Entityクラスで正常に使用できます。このフィルタはすべてのクエリに適用されるように見えます。 そして、このソフト削除されたエンティティを別の@Entityのコレクション要素として取得しようとすると、私は問題に直面しました。Spring DataのfindAll()メソッドでソフト削除された項目をフィルタリングする方法は?

参照チェーンを通じて番号xxとSoftDeletedEntityを(見つけることができません...

今私が唯一SpringDataレポのfindAll()方法でこの@Whereフィルタを使用してみたいと思います。私は、以下を試してみましたが、それはうまくいきませんでした。

public interface MyEntity extends JpaRepository<MyEntity, Long> { 

    @Where(clause = "is_deleted = 'false'") 
    @Override 
    List<MyEntity> findAll(); 
} 

が、それはあなたが休止状態と@Whereを使用している場合は、への簡単な解決策はありません可能な限り?

+0

私はそうは思わない。 Querydslを使用するには、nameメソッドで直接使用します。findAllByIsDeletedFalse() - >参照:http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query – Pau

+0

'List findByIsDeletedFalse();'はSpringデータJPA –

答えて

3

ですあなたの質問(バネデータではなく、Hibernateによってフィルタリングされています)。 しかし、あなたはソフト削除と春データの表現言語でクエリを実行する別のアプローチを検討することができます。

@Override 
@Query("select e from #{#entityName} e where e.deleteFlag=false") 
public List<T> findAll(); 

//recycle bin 
@Query("select e from #{#entityName} e where e.deleteFlag=true") 
public List<T> recycleBin(); 

@Query("update #{#entityName} e set e.deleteFlag=true where e.id=?1") 
@Modifying 
public void softDelete(String id); 
//#{#entityName} will be substituted by concrete entity name automatically. 

このような書き換えベースのリポジトリを。すべてのサブリポジトリインタフェースはソフト削除機能を持ちます。

+0

で動作するはずです。すべてのオブジェクト(たとえば、オブジェクトの名前がオブジェクトの名前であるかどうかを調べるには、あなたは単一のオブジェクトのためのこのソフト削除能力をしたい場合は、それは大丈夫ですが、ソフト削除能力を持っている必要がありますか?他はデータベースから削除されます。 答えは、オブジェクトのDAOのPauのコメントfindAllByIsDeletedFalse()です。 – obeliksz

+0

誰もPagingAndSortingRepositoryを使ってPage'dデータを取得するこの方法でJpaObjectRetrievalFailureExceptionに直面しましたか? –

関連する問題