5

私はSpringdataJPAを初めて使用し、QueryDSLでそれを最適に使用する方法を理解しようとしています。QueryDSLがなければ、@Queryアノテーションを使用してSpringDataインターフェイスでクエリを簡単に作成できます。

QueryDSLを使用して同じエクスペリエンスを得るには、私が見ることができることから、独自のカスタムリポジトリ実装を作成し、リポジトリインターフェイスにカスタム実装インターフェイスを拡張させるか、すべてのQueryDSLクエリをリポジトリをラップするサービスレイヤーに配置する必要があります。 。

最初のケースでは、実際のリポジトリオブジェクトにアクセスできないため、カスタムリポジトリでSD自動生成メソッド(例:findAll(QueryDSL predicate))を使用できなくなります。2番目のケースでは、クエリロジックをリポジトリレイヤーではなくサービスレイヤーに配置します。

どちらの解決策も私には特に魅力的ではありません。より適切な3番目の方法はありますか?または、QueryDSLとSpring Dataを適切に使用する方法を誤解していますか?

ありがとう!

エリック

4

1 に答える 1

10

おそらく最も便利な方法は、リポジトリインターフェイスを単純に拡張することですQueryDslPredicateExecutor。これにより、QuerydslPredicateオブジェクトをリポジトリにパイプして、スタンドアロンまたは並行して実行するPageable機能が追加されますSort

述語の組み合わせをリポジトリ層に本当に隠したい場合(これは絶対に問題ありませんが、実際には別の目的を果たします)、ここQueryDslRepositorySupportで説明するように別のリポジトリ実装クラスを作成し、基本クラスとして使用します。実装したファインダーメソッドでは、基本クラスのfrom(…)update(…)およびdelete(…)メソッドを使用するだけで、Querydslメタモデルを使用してクエリを簡単に構築および実行できます。

于 2012-11-22T07:18:53.187 に答える