首页 > 解决方案 > 在 Oracle 中超过 5 年的 Spring Boot 记录

问题描述

询问:

@Query("select o from Order o where o.creationDate < add_months(sysdate, -60)")

add_months在 JPA 查询中是不可能的。我怎样才能获得超过五年的记录?

标签: springoraclehibernatespring-data-jpajpql

解决方案


JPQL 没有这种处理日期的函数。

但是,您有两种选择:

  1. 使用带有选项的本机 SQLnativeQuery = true
  2. 计算 Java 代码上的日期并将结果传递给查询

因此,您可以使用本机 SQL 将属性添加nativeQuery@Query

@Query(nativeQuery = true, value = "select * from Order o where o.creationDate < add_months(sysdate, -60)")

在安装实体时使用nativeQuery可能是技巧。但是这种问题不在问题的范围内。

另一种选择仍然是使用 JPQL,但在调用 SQL 之前计算旧日期:

LocalDateTime oldDate = LocalDateTime.now().minusMonths(60);

更改@Query以接收日期作为参数:

@Query("select o from Order o where o.creationDate < ?1 ")
List<Order> findOldOrders(LocalDateTime oldDate);

并称它为:

List<Order> orders = repository.findOldOrders(oldDate);

推荐阅读