首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JPA Hibernate查询的“Interval”问题

JPA Hibernate查询的“Interval”问题
EN

Stack Overflow用户
提问于 2020-11-06 22:05:31
回答 2查看 548关注 0票数 2

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

代码语言:javascript
运行
复制
 @Query("Select ord From orders ord WHERE ord.created_date  <= (current_date  - INTERVAL '6 months')")
    List<Order> findOrders();
代码语言:javascript
运行
复制
unexpected token: INTERVAL near line 1, column 70 [Select ord From orders ord WHERE ord.created_date  <= (current_date  INTERVAL '6 months')

经过一些研究,我发现JPA不支持间隔定义。有没有解决方法来归档这个特殊的功能?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-08 02:22:35

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

代码语言:javascript
运行
复制
  List<Order> findALLByCreatedDateBefore(Date fromDate);

并在java端调用它。

代码语言:javascript
运行
复制
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();
}
票数 2
EN

Stack Overflow用户

发布于 2020-11-07 00:29:18

您可以通过在java代码中计算的日期来参数化您的存储库方法。假设created_date的类型是Instant,它应该是这样的:

代码语言:javascript
运行
复制
@Query("FROM orders ord WHERE ord.created_date  >= :fromDate")
List<Order> findOrders(Instant fromDate);

并调用它

代码语言:javascript
运行
复制
Instant fromDate = Instant.now().minus(Duration.ofDays(182));
yourRepository.findOrders(fromDate)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64716077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档