JPA 内の JPQL クエリ仕様では、カスタム オブジェクトを返すためのネイティブ サポートが提供されています。
を表す単純な Bean クラスを定義します。必要な出力構造:
<code class="java">public class SurveyAnswerStatistics { private String answer; private Long cnt; // Constructor }</code>
カスタム 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 インターフェイスは代替手段を提供します。解決策:
目的の出力に対応するプロパティを使用して投影インターフェイスを作成します: p>
<code class="java">public interface SurveyAnswerStatistics { String getAnswer(); int getCnt(); }</code>
投影されたプロパティを返すようにリポジトリ メソッドを更新します:
<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 サイトの他の関連記事を参照してください。