实体数据类型必须与JPA存储库中的参数相同吗?

时间:2019-02-23 09:21:58

标签: java spring spring-boot spring-data-jpa

我尝试使用JPA存储库从数据库中获取数据。在这里,我要获取MyObjectstartdate之间的所有enddate

代码

存储库

@GetMapping
List<Tache> getMyObjectsByStartdateAfterAndEnddateBefore(@RequestParam Date startdate,
                                                         @RequestParam Date enddate);

控制器

@GetMapping(params = {"startdate", "enddate"})
public ResponseEntity<?> findAllByStartdateAfterAndEnddateBefore(@RequestParam("startdate") String startdate,
                                                                 @RequestParam("enddate") String enddate) throws ParseException {
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
    Date start = formatter.parse(startdate);
    Date end = formatter.parse(enddate);
    return new ResponseEntity<>(this.tacheResource.getMyObjectsByStartdateAfterAndEnddateBefore(start, end), HttpStatus.OK);
}

实体

@Entity
public class MyObject {

    @Id
    private String id;
    @ColumnDefault("CURDATE()")
    private String startdate;
    private String enddate;
    ...
}

GET请求示例

http://localhost:8082/myobject/?startdate=2019-02-19&enddate=2019-06-01

错误(进入存储库)

  

期望的参数类型:字符串字符串

但是,我不明白为什么,因为我定义了以Date类型为参数的方法。是因为日期以String的形式存储在我的实体中?

2 个答案:

答案 0 :(得分:2)

您的实体的开始日期和结束日期数据类型也应为“日期”,以获取具有日期参数的对象

@Entity
public class MyObject {

   @Id
   private String id;

   @ColumnDefault("CURDATE()")
   private Date startdate;
   private Date enddate;
   ...

}

答案 1 :(得分:1)

它应该始终是jpa方法参数与您的类字段类型之间的匹配。在您的情况下,如果MyObject具有String字段(startDate和endDate),则jpa方法应接收String参数。 对于您的特定示例,让MyObject类带有Date字段而不是String看起来更自然:

@Entity
public class MyObject {

   @Id
   private String id;
   @ColumnDefault("CURDATE()")
   private Date startdate;
   private Date enddate;
   ...
}

通过这种方式,您将能够将Date对象作为参数传递给JPA方法。