java - 使用 CriteriaQuery 调用 oracle 方法 add_months
问题描述
我有一个查询,我想使用CriteriaQuery
.
询问:
select * from MY_TABLE where updated_at <= add_months(TRUNC(SYSDATE) + 1, -3)
它基本上是在表中查找update_at
日期早于 3 个月的所有记录。
我尝试了此博客中介绍的方法。
问题是我-3
作为参数,但我预期的返回类型是Date
.
代码:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(MyTable.class);
Root<MyTable> root = cq.from(MyTable.class);
Expression<Date> truncExpr = cb.function("TRUNC", Date.class, cb.currentTimestamp());
Expression<Date> addMonthsExpr = cb.function("add_months", Date.class, truncExpr, months); // <----Compilation error.
Predicate datePredicate = cb.lessThanOrEqualTo(root.get("updated_at"), addMonthsExpr);
请建议。
解决方案
变量的定义months
没有显示,但我的猜测是它是一个整数,例如:
int months = -3; // or from a method argument of type int anyway
正确的方法如下(不直观,除非您知道):
Expression<Integer> months = cb.literal(-3);
推荐阅读
- server - 是否可以在 Wildfly 16 中为 SFTP 制作数据源或任何替代方法?
- python - 将特定行从一个 CSV 文件添加到另一个文件并应用特定条件
- android - Flutter 应用程序中每个页面的多个脚手架
- python - 如何反转输入字符串中的特定字符串并返回带有反转部分的整个字符串?
- oauth-2.0 - Active Directory 是否不支持使用 PKCE 的授权代码流?
- vba - 为什么不使用通配符设置在 VBA 宏中查找和替换将超链接单词识别为文本的合法部分
- javascript - 如何将 html 多行表数据获取到 Javascript
- automation - 从 cgit 克隆所有项目
- python - 对一堆文件进行平均处理
- delphi - Delphi 枚举单个底层类型为字节、字等,而不更改全局编译器设置