spring - 在 Oracle 中超过 5 年的 Spring Boot 记录
问题描述
询问:
@Query("select o from Order o where o.creationDate < add_months(sysdate, -60)")
add_months
在 JPA 查询中是不可能的。我怎样才能获得超过五年的记录?
解决方案
JPQL 没有这种处理日期的函数。
但是,您有两种选择:
- 使用带有选项的本机 SQL
nativeQuery = true
- 计算 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);
推荐阅读
- angular - Angular 10 PrimeNG 列表框项目上的条件咏叹调标签
- php - 我想知道如何对我的 php api 进行速率限制,以便 ip 或客户端无法使用 5 分钟
- azure - Azure VM 和 Visual Studio 代码
- python - 在 python 中更改 tkinter 的标签
- discord.js - QuickDB + Discordjs 'Gameboard' 固定消息系统不工作(类似于 Carl-Bot 的 'Starboard')
- sql - PL/SQL:光标将表中的最后一条记录加倍
- c# - 具有自定义属性的用户控件,例如 Grid.ColumnDefinitions
- linux - 运行时:无法使用 Docker 创建新的操作系统线程
- rust - 从文件内容生成常量 ar 编译时间
- symfony - Symfony 返回响应,然后做繁重的工作