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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-11-02 06:16:02622ブラウズ

How to Return Custom Objects from Spring Data JPA GROUP BY Queries?

Spring データ JPA GROUP BY クエリで返されるカスタム オブジェクト

概要


< p>Spring Data JPA GROUP BY クエリからデータをカスタム オブジェクトとして取得すると、データの表示が強化され、その後の処理が簡素化されます。このガイドでは、これを実現する方法を検討し、JPQL とネイティブ クエリの両方のソリューションを紹介します。

JPQL クエリ


JPA 内の JPQL クエリ仕様では、カスタム オブジェクトを返すためのネイティブ サポートが提供されています。

ステップ 1: カスタム Bean を作成する


を表す単純な Bean クラスを定義します。必要な出力構造:

<code class="java">public class SurveyAnswerStatistics {
  private String answer;
  private Long cnt;

  // Constructor
}</code>

ステップ 2: Bean インスタンスを返す


カスタム 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();
}</code>

ネイティブ クエリ


ネイティブ クエリには新しいキーワードの直接サポートがありませんが、Spring Data Projection インターフェイスは代替手段を提供します。解決策:

ステップ 1: 投影インターフェイスを定義する


目的の出力に対応するプロパティを使用して投影インターフェイスを作成します:

<code class="java">public interface SurveyAnswerStatistics {
  String getAnswer();
  int getCnt();
}</code>

ステップ 2: 投影されたプロパティを返す


投影されたプロパティを返すようにリポジトリ メソッドを更新します:

<code class="java">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>

SQL AS キーワードを使用して、結果フィールドを射影プロパティにシームレスにマッピングします。

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

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