Maison  >  Article  >  Java  >  Comment récupérer des objets personnalisés à partir des résultats de requêtes groupées Spring Data JPA ?

Comment récupérer des objets personnalisés à partir des résultats de requêtes groupées Spring Data JPA ?

DDD
DDDoriginal
2024-11-01 14:21:02575parcourir

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

Comment récupérer des objets personnalisés à partir des résultats de requêtes groupées Spring Data JPA

Présentation

Spring Data JPA fournit des mécanismes pour exécuter des requêtes JPQL et récupérer les résultats comme objets personnalisés.

Requêtes JPQL

Étape 1 : Définir une classe de bean

Créez une classe de bean simple pour représenter la structure d'objet souhaitée :

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

  // Constructor for object instantiation
}</code>

Étape 2 : Utiliser le bean dans la méthode du référentiel

Modifier la méthode du référentiel pour renvoyer les instances de la classe du 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>

Requêtes natives

Si vous utilisez des requêtes natives, la syntaxe spécifique à JPA n'est pas prise en charge. Utilisez plutôt :

Étape 1 : Créer une interface de projection

Définissez une interface de projection pour spécifier les propriétés de l'objet souhaité :

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

Étape 2 : Mapper les champs de résultat dans la requête

Utilisez le mot-clé SQL AS dans la requête pour mapper les champs de résultat aux propriétés de projection :

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

Considérations

  • Assurez-vous que le chemin de classe du bean est entièrement qualifié.
  • Utilisez le nouveau mot-clé lors de l'instanciation des classes de bean.
  • L'ordre des attributs dans le constructeur doit correspondre à l'ordre des champs de la requête.
  • Utilisez des interfaces de projection pour les requêtes natives.
  • Mappez chaque champ de résultat à l'aide de AS dans les requêtes natives.

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