Maison  >  Article  >  Java  >  Comment renvoyer des objets personnalisés à partir des requêtes Spring Data JPA GROUP BY ?

Comment renvoyer des objets personnalisés à partir des requêtes Spring Data JPA GROUP BY ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-02 06:16:02622parcourir

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

Objet personnalisé renvoyé dans les données Spring JPA GROUP BY Requêtes

Introduction


< p>La récupération de données en tant qu'objets personnalisés à partir des requêtes Spring Data JPA GROUP BY améliore la présentation des données et simplifie le traitement ultérieur. Ce guide explique comment y parvenir, en présentant des solutions pour les requêtes JPQL et natives.

Requêtes JPQL


Requêtes JPQL au sein du JPA La spécification offre une prise en charge native du renvoi d'objets personnalisés.

Étape 1 : Créer un bean personnalisé


Définir une classe de bean simple pour représenter le structure de sortie souhaitée :

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

  // Constructor
}</code>

Étape 2 : renvoyer les instances du bean


Mettre à jour la méthode du référentiel pour renvoyer les instances du bean personnalisé :

<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>

Requêtes natives


Bien que les requêtes natives ne prennent pas directement en charge le nouveau mot-clé, les interfaces Spring Data Projection offrent une alternative solution:

Étape 1 : Définir une interface de projection


Créer une interface de projection avec des propriétés correspondant à la sortie souhaitée :

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

Étape 2 : Renvoyer les propriétés projetées


Mettre à jour la méthode du référentiel pour renvoyer les propriétés projetées :

<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>

Utilisez le mot-clé SQL AS pour mapper les champs de résultats aux propriétés de projection de manière transparente.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn