首页 > Java > java教程 > 如何使用聚合函数自定义JPA查询的结果?

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
发布: 2023-09-18 16:49:07
转载
1064 人浏览过

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

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

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

Dept.java

1

2

3

4

5

6

7

8

9

10

@Entity

public class Dept {

   @Id

   private Long id;

   private String name;

   @OneToMany(mappedBy = "dep")

   private List<Employee> emp;

   //Getters

   //Setters

}

登录后复制

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

员工.java

1

2

3

4

5

6

7

8

9

10

11

@Entity

public class Employee {

   @Id

   private Long id;

   private Integer joiningyear;

   @ManyToOne

   private Dept dep;

    

   //Getters

   //Setters

}

登录后复制

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

1

2

3

4

5

6

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

}

登录后复制

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

CountEmployees.java

的中文翻译为:

CountEmployees.java

1

2

3

4

5

6

7

8

9

10

11

12

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查询,如下所示−

1

2

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

List<CountEmployees> countEmployeesByJoining();

登录后复制

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

以上是如何使用聚合函数自定义JPA查询的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
没有bootstrap自定义的视频教程
来自于 1970-01-01 08:00:00
0
0
0
自定义安装apache
来自于 1970-01-01 08:00:00
0
0
0
nginx如何自定义响应头
来自于 1970-01-01 08:00:00
0
0
0
nginx 如何配置自定义500页面
来自于 1970-01-01 08:00:00
0
0
0
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板