Spring Data JPA のグループ化されたクエリ結果からカスタム オブジェクトを取得する方法

DDD
リリース: 2024-11-01 14:21:02
オリジナル
571 人が閲覧しました

How to Retrieve Custom Objects from Spring Data JPA Grouped Query Results?

Spring Data JPA のグループ化されたクエリ結果からカスタム オブジェクトを取得する方法

概要

Spring Data JPA は、JPQL クエリを実行し、結果を次のように取得するメカニズムを提供します。カスタム オブジェクト。

JPQL クエリ

ステップ 1: Bean クラスを定義する

目的のオブジェクト構造を表す単純な Bean クラスを作成します。

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

  // Constructor for object instantiation
}</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>
ログイン後にコピー

ネイティブ クエリ

ネイティブ クエリを使用する場合、JPA 固有の構文はサポートされません。代わりに、

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

必要なオブジェクトのプロパティを指定する投影インターフェイスを定義します:

<code class="java">public interface SurveyAnswerStatistics {
  String getAnswer();
  int getCnt();
}</code>
ログイン後にコピー

ステップ 2: クエリ内の結果フィールドをマップする

クエリ内で SQL AS キーワードを使用して、結果フィールドを射影プロパティにマップします:

<code class="java">@Query(nativeQuery = true, value =
          "SELECT v.answer AS answer, COUNT(v) AS cnt FROM Survey v GROUP BY v.answer")
    List<SurveyAnswerStatistics> findSurveyCount();
}</code>
ログイン後にコピー

考慮事項

  • Bean クラスパスが完全修飾されていることを確認してください。
  • Bean クラスをインスタンス化するときに新しいキーワードを使用してください。
  • コンストラクター内の属性の順序はクエリのフィールドの順序と一致する必要があります。
  • ネイティブ クエリにプロジェクション インターフェイスを使用します。
  • ネイティブ クエリで AS を使用して各結果フィールドをマップします。

以上がSpring Data JPA のグループ化されたクエリ結果からカスタム オブジェクトを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート