Maison > Java > javaDidacticiel > le corps du texte

Comment personnaliser les résultats d'une requête JPA à l'aide de fonctions d'agrégation ?

WBOY
Libérer: 2023-09-18 16:49:07
avant
908 Les gens l'ont consulté

Comment personnaliser les résultats dune requête JPA à laide de fonctions dagrégation ?

La plupart du temps, lorsque nous utilisons des requêtes JPA, les résultats obtenus sont mappés à des objets/types de données spécifiques. Mais lorsque nous utilisons des fonctions d'agrégation dans les requêtes, le traitement des résultats nous oblige parfois à personnaliser la requête JPA.

Comprenons (service, employé) à travers un exemple −

Département.java

@Entity
public class Dept {
   @Id
   private Long id;
   private String name;
   @OneToMany(mappedBy = "dep")
   private List<Employee> emp;
   //Getters
   //Setters
}
Copier après la connexion

Un service peut avoir un ou plusieurs employés, mais un employé ne peut appartenir qu'à un seul service.

employé.java

@Entity
public class Employee {
   @Id
   private Long id;
   private Integer joiningyear;
   @ManyToOne
   private Dept dep;
   
   //Getters
   //Setters
}
Copier après la connexion

Maintenant, si nous voulons obtenir la date d'entrée et le nombre de salariés regroupés par date d'entrée,

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
   // query methods
   @Query("SELECT e.joiningyear, COUNT(e.joiningyear) FROM Employee AS e GROUP BY e.joiningyear")
   List<Object[]> countEmployeesByJoiningYear();
}
Copier après la connexion

La requête ci-dessus fonctionne correctement, mais le stockage de valeurs sous la forme de List Au lieu de cela, nous pouvons personnaliser la requête JPA pour mapper les résultats de la requête ci-dessus dans une classe Java. Cette classe Java n'est qu'un simple POJO (Plain Old Java Object) et n'a pas besoin d'être annotée avec @Entity.

La traduction chinoise de

CountEmployees.java

est :

CountEmployees.java

package com.tutorialspoint;
public class CountEmployees {
   private Integer joinyear;
   private Long totalEmp;
   
   public CountEmployees(Integer joinyear, Long totalEmp) {
      this.joinyear = joinyear;
      this.totalEmp = totalEmp;
   }
   //Getters
   //Setters
}
Copier après la connexion

Maintenant, nous pouvons personnaliser notre requête JPA comme indiqué ci-dessous −

@Query("SELECT new com.tutorialspoint.CountEmployees(e.joiningyear, COUNT(e.joiningyear)) " + "FROM Employee AS e GROUP BY e.joiningyear")
List<CountEmployees> countEmployeesByJoining();
Copier après la connexion

Les résultats de la requête de sélection ci-dessus seront mappés à la classe CountEmployees. De cette façon, nous pouvons personnaliser les requêtes JPA et mapper les résultats aux classes Java.

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!

Étiquettes associées:
source:tutorialspoint.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal