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 没有这种处理日期的函数。
但是,您有两个选择:
- 使用带有选项
nativeQuery = true
的原生 SQL
- 计算 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)
查询:
@Query("select o from Order o where o.creationDate < add_months(sysdate, -60)")
add_months
在 JPA 查询中是不可能的。我怎样才能获得超过五年的记录?
JPQL 没有这种处理日期的函数。
但是,您有两个选择:
- 使用带有选项
nativeQuery = true
的原生 SQL
- 计算 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)