2017-07-04 6 views
1

データベースからデータを取得するときに適用するフィルタのセットに従ってクエリ文字列を生成するメソッドを使用しています。したがって、新しいフィルタごとに、このメソッドは例えばAND variable_x = '4'のようなものを追加します。実行時に生成されたjpqlクエリで@Queryを提供する

私はスプリングデータのJpaRepositoryインターフェイスを使用したいと思います。この生成クエリを実行するには、@Queryという注釈が付けられたメソッドを作成します。ただし、@Queryには値として定数が必要です。では、この生成されたクエリを@Queryに実行させる方法はありますか?例えば、このようなことができますか? JPQLクエリ全体をパラメータとして@Queryに与えることはできますか?

@Query("?1") 
public abstract void executeRuntimeGeneratedQuery(String query); 

また、私の問題を解決するより洗練されたソリューションがありますか?

+0

条件付きのSpringデータで使用するには、QueryDSLまたは仕様を使用する必要があります。この[記事](https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/)または[this](https://docs.spring)を確認してください。 io/spring-data/jpa/docs/current/reference/html/#special)を実行する方法は です。より単純な条件の場合は、[Query by Example](https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#query-by-example) – Ranjeet

答えて

0

@QueryのパラメータとしてJPQLクエリ全体を指定できますか?

これは不可能です。 @Query注釈は静的なもので、JPAでサポートされているパラメータ(SpEL式を含む)を使用できます。これは、基本的には式であり、列名や表名ではありません。

また、私の問題を解決するより洗練されたソリューションがありますか?

はい、代替手段があります。あなたが描いたものからSpecifications seem to fit the bill best

もちろん、これをcustom methodsと組み合わせることもできます。これにより、仕様よりも多くのことを行う場合は、その日を節約できます。

+0

を使用することができます。エラー LocalDate date = new LocalDate()。minusYears(2);エラー可能ではありません。 LocalDate.now()でなければなりません。minusYears(2)localdateには私的コンストラクタがあるので、私は信じています。しかし、リンクに感謝します。 – Maurice

+0

ファイルして発行できますか? https://jira.spring.io/browse/DATAJPA –

関連する問題