Sql 带“Interval”的JPA Hibernate查询存在问题

Sql 带“Interval”的JPA Hibernate查询存在问题,sql,spring-boot,hibernate,jpa,Sql,Spring Boot,Hibernate,Jpa,我需要为我的后端应用程序检索过去6个月的订单的可能性 @Query("Select ord From orders ord WHERE ord.created_date <= (current_date - INTERVAL '6 months')") List<Order> findOrders(); 经过一些研究,我发现JPA不支持区间定义。 是否有一种解决方法来存档此特定功能?您可以通过java代码中计算的日期来参数化存储库方法。假设c

我需要为我的后端应用程序检索过去6个月的订单的可能性

 @Query("Select ord From orders ord WHERE ord.created_date  <= (current_date  - INTERVAL '6 months')")
    List<Order> findOrders();
经过一些研究,我发现JPA不支持区间定义。
是否有一种解决方法来存档此特定功能?

您可以通过java代码中计算的日期来参数化存储库方法。假设created_date的类型为Instant,则类似于:

@Query("FROM orders ord WHERE ord.created_date  >= :fromDate")
List<Order> findOrders(Instant fromDate);

在这种情况下,使用JPA提供的功能,其中不需要本机sql代码

  List<Order> findALLByCreatedDateBefore(Date fromDate);

尝试当前日期-以“6个月”为间隔。它应该可以工作,但我没有足够的信心将其作为答案发布。尝试了你的版本。不幸的是,它不能很好地工作。在JPA或数据库中解析时它会崩溃吗?错误消息会很有用。JPQL和HQL不支持间隔,你必须使用Adam Gajyes提供的解决方案我想这应该是一种方法,而不是创建本地查询。因此,像这种方法一样,这种方法也应该很有效。我喜欢你的方法,但我想你也需要添加到日历中,而不是设置月份,因为现在可能会出现异常。设置月份->需要0-11-->现在。添加日历。月份,月份;
Instant fromDate = Instant.now().minus(Duration.ofDays(182));
yourRepository.findOrders(fromDate)
  List<Order> findALLByCreatedDateBefore(Date fromDate);
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();
}