2017-11-13 5 views
1

リポジトリクラスで使用したHQLで書かれた複雑なクエリ(複数の結合とサブクエリを使用)があります。下記に類似しています -JPAカスタムに動的条件を追加するクエリ

@Repository 
public interface DataRepository extends PagingAndSortingRepository<Data,String> { 

    public List<Data> findByService(@Param("service")Service service, Pageable page); 

    @Query("SELECT DISTINCT d from Data d " 
      +" WHERE (d.working in (SELECT d1 from Data d1 " 
       +" JOIN d1.working d1w " 
       +" JOIN d1.service s WITH (s in (:serviceList)))" 
      +" OR d.cleared IS NOT NULL) AND [..several other CRITERIA]") 
    public Page<Data> findForServices(@Param("serviceList")Set<Service> serviceList, Pageable page); 
.... 

これで、基準を動的に追加する必要があります。これらの基準は柔軟性があり、私はそれをすぐにHQLに入れるのを妨げています。とにかくそれは可能ですか?

私はインターネットを通してふるい分けて、dynamic queryの解決策を見つけました。しかし、私は彼らがrepositoryのクエリで@Queryというカスタムクエリを持っていない場合にのみ動作すると思います。

interesting questionが見つかりました。しかしこれは、照会する単一のテーブルがある場合にも適しています。

生のSQLクエリに切り替える必要はありません。これをどうすれば解決できますか?

+0

動的に構築しやすい「CriteriaQuery」に変換することはできませんか?私は他の可能性について少し懐疑的です。正確に何を意味していますか?しかし、これはクエリする単一のテーブルがある場合にも適していますか?おそらくこのhttps://stackoverflow.com/a/30436524/6413377の問題? – pirho

答えて

1

仕様と述語を持つ前述のCriteria APIは、使い慣れて少し難しいですが、動的条件を処理するのには良い方法です。 注釈ベースのクエリとプログラムによるクエリ作成を混在させることはできないと思います。

関連する問題