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 −
@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.
@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
La traduction chinoise depackage 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!