emp;//Getters//Setters} un département"/> emp;//Getters//Setters} un département">

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

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

WBOY
WBOYavant
2023-09-18 16:49:07914parcourir

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
}

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
}

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();
}

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
}

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();

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer