我尝试使用JPA存储库从数据库中获取数据。在这里,我要获取MyObject
和startdate
之间的所有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
的形式存储在我的实体中?
答案 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方法。