「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Spring Data JPA GROUP BY クエリからカスタム オブジェクトを返す方法は?

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

2024 年 12 月 22 日に公開
ブラウズ:147

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

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

概要


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

JPQL クエリ


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

ステップ 1: カスタム オブジェクトを作成するBean


目的の出力構造を表す単純な Bean クラスを定義します。

public class SurveyAnswerStatistics {
  private String answer;
  private Long cnt;

  // Constructor
}

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


カスタム Bean のインスタンスを返すようにリポジトリ メソッドを更新します。

public interface SurveyRepository extends CrudRepository {
    @Query("SELECT new com.path.to.SurveyAnswerStatistics(v.answer, COUNT(v)) FROM Survey v GROUP BY v.answer")
    List findSurveyCount();
}

ネイティブ クエリ


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

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


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

public interface SurveyAnswerStatistics {
  String getAnswer();
  int getCnt();
}

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


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

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

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

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3