繁体   English   中英

找不到能够从类型 [java.time.LocalDate] 转换为类型 [@org.springframework.data.jpa.repository.Query java.lang.String] 的转换器

[英]No converter found capable of converting from type [java.time.LocalDate] to type [@org.springframework.data.jpa.repository.Query java.lang.String]

我有一个带有 mysql 和 jpa 的 springboot 项目,在那里我有一个模型/域 class

class MyClass {
    private long id;
    private String name;
    private LocalDate date;
    private String data1;
    private Integer data2;
}

我还有扩展 JpaRepository 的存储库接口,我想在其中添加自定义查询以按名称选择具有最新日期的行 - 代码如下:

interface MyClassRepository extends JpaRepository<MyClass, Long> {
    @Query(value = "select m.name, max(date) from MyClass m group by m.name")
    List<String> selectLatest();
}

当执行该查询的调用时,我收到标题中的错误消息

No converter found capable of converting from type [java.time.LocalDate] to type [@org.springframework.data.jpa.repository.Query java.lang.String]

我发现了类似的问题,但每个问题都比 class 更具体,比我的更复杂,我认为这是 java.util.LocalDate 这就是问题所在?

你 select 两列里面不是字符串。 您的消息返回一个Object[]

interface MyClassRepository extends JpaRepository<MyClass, Long> {
    @Query(value = "select m.name, max(date) from MyClass m group by m.name")
    List<Object[]> selectLatest();
}

其中索引 0 包含名称,索引 1 包含日期。

但对我来说,更好的解决方案是创建一个具有两个属性的 Object 和 select 这个:

public class MyLatestClass {
   private String name;
   private LocalDate date;
   
   public MyLatestClass(String name, LocalDate date){
     this.name=name;
     this.date=date;
   }
   //getter 
   ....
}

interface MyClassRepository extends JpaRepository<MyClass, Long> {
    @Query(value = "select new MyLatestClass(name, max(date)) from MyClass m group by m.name")
    List<MyLatestClass> selectLatest();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM