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

Susan Sarandon
リリース: 2024-11-02 06:16:02
オリジナル
624 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!