gpt4 book ai didi

java - Spring Boot自定义查询分组依据和计数

转载 作者:行者123 更新时间:2023-12-02 08:46:19 25 4
gpt4 key购买 nike

我在从自定义查询访问数据时遇到问题。

这是 POJO:

@Getter
@Setter
@NoArgsContructor
@AllArgsConstructor
@Entity
@Table(name = "run_list")
public class RunList {
@Id
@Column(name = "id")
private Long id;

@Column(name = "control_run_name"
private String serverName;

@Column(name = "control_run_date"
private Date controlRunDate

<.. bunch of other fields .. >

这是存储库:

public interface RunListRepository extends JpaRepository<RunList, Long> {

@Query("SELECT u.serverName,count(u) as controlRunCount from RunList u where u.controlRunDate < :lastUploadDate group by u.serverName")
List<RunList> findAllControlRunAfterDate(@Param("lastUploadDate") Date lastUploadDate);

在 Controller 中,我像这样调用存储库方法:

Date date = new SimpleDateFormat("yyyy-MM-dd").parse("2020-03-01");
model.addAttribute("runList",runListRepository.findAllControlRunAfterDate(date);

与查询中日期的绑定(bind)工作正常,我得到了分组依据的第一个结果,这样问题就解决了。问题是我在运行时遇到错误:

Failed to convert from type[java.lang.Object[]] to type [@org.springframework.data.jpa.Query my.package.name.RunList} for value '{server1,14}';

当我从 CLI 中对数据库使用 SQL 查询时,我得到了服务器名称和计数的良好分组。我猜测问题在于计数字段的转换,该字段从存储库方法中突然弹出,而 Spring 也不知道要链接什么。

我尝试在这里使用仅具有 String serverName 和 Ingeter controlRunCount 的 RunListDTO,但没有成功 - 存储库接口(interface)不喜欢我在使用 . 创建的接口(interface)中使用的方法的输出中使用 DTO。

当存储库进行计数时,有没有办法使其成为飞行中的自定义数组/对象?

问候,贾雷克。

最佳答案

由于您选择了一个字段和一个计数,因此无法将其映射到您的实体,因此此查询返回您指定的值的数组,就像您在异常中看到的那样: '{server1, 14}'

public interface RunListRepository extends JpaRepository<RunList, Long> {

@Query("SELECT u.serverName,count(u) as controlRunCount from RunList u where u.controlRunDate < :lastUploadDate group by u.serverName")
List<Object[]> findAllControlRunAfterDate(@Param("lastUploadDate") Date lastUploadDate);

因此,在您的服务中,您可以使用这些数据,例如:

List<Object[]> list = runListRepository.findAllControlRunAfterDate(yourDate);
for (Object[] ob : list){
String serverName = (String)ob[0];
Integer count = (Integer)ob[1];
}

关于java - Spring Boot自定义查询分组依据和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61059344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com