【问题标题】:Call oracle method add_months using CriteriaQuery使用 CriteriaQuery 调用 oracle 方法 add_months
【发布时间】:2020-12-21 00:34:52
【问题描述】:

我想使用CriteriaQuery 执行一个查询。

查询:

select * from MY_TABLE where updated_at <= add_months(TRUNC(SYSDATE) + 1, -3)

基本上是查找表中update_at日期早于3个月的所有记录。

我尝试了this blog 提出的方法。

问题是我将-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);

请提出建议。

【问题讨论】:

    标签: java spring hibernate jpa criteria


    【解决方案1】:

    months变量的定义没有显示,但我猜测是整数,例如:

    int months = -3; // or from a method argument of type int anyway
    

    正确的方法如下(不直观,除非你知道):

    Expression<Integer> months = cb.literal(-3);
    

    【讨论】:

      猜你喜欢
      • 2017-10-09
      • 2011-03-13
      • 1970-01-01
      • 2011-03-29
      • 2019-03-31
      • 2012-08-28
      • 2012-07-24
      • 2018-11-04
      • 2011-07-17
      相关资源
      最近更新 更多