Spring Oracle 中超过 5 年的引导记录

Spring Boot Records older then 5 years in Oracle

查询:

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

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

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

但是,您有两个选择:

  1. 使用带有选项 nativeQuery = true
  2. 的原生 SQL
  3. 计算 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);

试试这个

SELECT * 来自订单<br> WHERE DATEDIFF(YEAR, o.creationDate, GetDate()) >= 5

或者像这样

SELECT * FROM order WHERE o.creationDate < DATE_SUB(NOW(),INTERVAL 5 YEAR)