我需要为我的后端应用程序检索过去6个月的订单的可能性。
@Query("Select ord From orders ord WHERE ord.created_date <= (current_date - INTERVAL '6 months')")
List<Order> findOrders();
unexpected token: INTERVAL near line 1, column 70 [Select ord From orders ord WHERE ord.created_date <= (current_date INTERVAL '6 months')
经过一些研究,我发现JPA不支持间隔定义。有没有解决方法来归档这个特殊的功能?
发布于 2020-11-08 02:22:35
在这种情况下,使用JPA提供功能,其中不需要本机sql代码。
List<Order> findALLByCreatedDateBefore(Date fromDate);
并在java端调用它。
public void findOrders() {
date = setMonthToJavaUtilDate(new Date(), -6);
yourRepository.findOrders(fromDate)
//your logic...
}
private Date setMonthToJavaUtilDate(Date date, int month) {
Calendar now = Calendar.getInstance();
now.setTime(date);
now.add(Calendar.MONTH, month);
return now.getTime();
}
发布于 2020-11-07 00:29:18
您可以通过在java代码中计算的日期来参数化您的存储库方法。假设created_date
的类型是Instant
,它应该是这样的:
@Query("FROM orders ord WHERE ord.created_date >= :fromDate")
List<Order> findOrders(Instant fromDate);
并调用它
Instant fromDate = Instant.now().minus(Duration.ofDays(182));
yourRepository.findOrders(fromDate)
https://stackoverflow.com/questions/64716077
复制相似问题