如何使用聚合函数自定义JPA查询的结果?

2023年 9月 18日 48.7k 0

如何使用聚合函数自定义JPA查询的结果?

大多数时候,当我们使用 JPA 查询时,获得的结果会映射到对象/特定数据类型。但是当我们在查询中使用聚合函数时,处理结果有时需要我们自定义 JPA 查询。

让我们通过一个例子来理解(部门,员工)−

Dept.java

@Entity
public class Dept {
@Id
private Long id;
private String name;
@OneToMany(mappedBy = "dep")
private List emp;
//Getters
//Setters
}

登录后复制

一个部门可以有一名或多名员工,但一名员工只能属于一个部门。

员工.java

@Entity
public class Employee {
@Id
private Long id;
private Integer joiningyear;
@ManyToOne
private Dept dep;

//Getters
//Setters
}

登录后复制

现在,如果我们想获取入职日期以及按入职日期分组的员工人数,

@Repository
public interface EmployeeRepository extends JpaRepository {
// query methods
@Query("SELECT e.joiningyear, COUNT(e.joiningyear) FROM Employee AS e GROUP BY e.joiningyear")
List countEmployeesByJoiningYear();
}

登录后复制

上述查询可以正常工作,但是以List的方式存储值可能会导致错误。相反,我们可以自定义JPA查询,将上述查询的结果映射到一个Java类中。这个Java类只是一个简单的POJO(Plain Old Java Object),不需要用@Entity进行注解。

CountEmployees.java

的中文翻译为:

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
}

登录后复制

现在,我们可以自定义我们的JPA查询,如下所示−

@Query("SELECT new com.tutorialspoint.CountEmployees(e.joiningyear, COUNT(e.joiningyear)) " + "FROM Employee AS e GROUP BY e.joiningyear")
List countEmployeesByJoining();

登录后复制

上述选择查询的结果将映射到 CountEmployees 类。通过这种方式,我们可以自定义 JPA 查询并将结果映射到 java 类。

以上就是如何使用聚合函数自定义JPA查询的结果?的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论