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

问题描述 投票:0回答:1

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

这里是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);

在控制器中,我像这样调用存储库方法:

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

与查询中日期的绑定有效,我得到了分组的第一个结果,因此可以解决。问题是我在运行此程序时出错:

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查询时,我得到了一个很好的serverName和count的分组。我猜测问题出在计数字段的转换中,该计数字段从存储库方法中突然弹出,Spring也不知道该如何链接。

[我尝试在这里使用仅具有String serverName和Ingeter controlRunCount且没有运气的RunListDTO-存储库接口不喜欢我在使用。创建的接口中使用的方法的输出中使用DTO。] >

当存储库计数时,有没有办法使它成为正在运行的自定义数组/对象?

关于,Jarek。

我在通过自定义查询访问数据时遇到问题。这是POJO:@Getter @Setter @NoArgsContructor @AllArgsConstructor @Entity @Table(name =“ run_list”)公共类RunList {...

java spring spring-boot jpa count
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.