ホームページ  >  記事  >  Java  >  Spring Data JPA GROUP BY クエリからカスタム オブジェクトを返す方法は?

Spring Data JPA GROUP BY クエリからカスタム オブジェクトを返す方法は?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-01 08:51:30556ブラウズ

How to Return a Custom Object from a Spring Data JPA GROUP BY Query?

Spring Data JPA GROUP BY クエリからカスタム オブジェクトを返す方法

Spring Data JPA を使用して複雑なクエリを実行する場合、代わりにカスタム オブジェクトを返す必要があります。デフォルトのエンティティ。このようなシナリオの 1 つは、特定のフィールドごとに結果をグループ化し、各グループの数を取得することです。この記事では、これを実現する 2 つの方法について説明します。1 つは JPQL クエリ用、もう 1 つはネイティブ クエリ用です。

JPQL クエリのソリューション

JPQL は、新しいキーワードを使用してカスタム オブジェクトを返すためのネイティブ サポートを提供します。その方法は次のとおりです。

  1. 必要なデータ構造を表す単純な Bean クラスを定義します。
  2. リポジトリ メソッドからこの Bean クラスのインスタンスを返します。
<code class="java">public interface SurveyRepository extends CrudRepository<Survey, Long> {
    @Query("SELECT new com.path.to.SurveyAnswerStatistics(v.answer, COUNT(v)) FROM Survey v GROUP BY v.answer")
    List<SurveyAnswerStatistics> findSurveyCount();
}

public class SurveyAnswerStatistics {
    private String answer;
    private Long cnt;
    // getters and setters here
}</code>

ネイティブ クエリのソリューション

ネイティブ クエリ新しいキーワードはサポートされていません。代わりに、Spring Data プロジェクション インターフェイスを使用します。

  1. 必要なプロパティを持つプロジェクション インターフェイスを定義します。
  2. クエリから投影されたプロパティを返します。
<code class="java">public interface SurveyAnswerStatistics {
    String getAnswer();
    int getCnt();
}

public interface SurveyRepository extends CrudRepository<Survey, Long> {
    @Query(nativeQuery = true, value = "SELECT v.answer AS answer, COUNT(v) AS cnt FROM Survey v GROUP BY v.answer")
    List<SurveyAnswerStatistics> findSurveyCount();
}</code>

重要な注意事項:

  • JPQL クエリの完全修飾パスと新しいキーワードの使用。
  • ネイティブ クエリで結果フィールドをプロジェクション インターフェイスにマッピングするには、SQL の AS キーワードを使用します。

以上がSpring Data JPA GROUP BY クエリからカスタム オブジェクトを返す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。