【问题标题】:JPA convert Expression<Timestamp> to Expression<Calendar>JPA 将 Expression<Timestamp> 转换为 Expression<Calendar>
【发布时间】:2014-05-07 22:00:09
【问题描述】:

我正在尝试执行以下操作(cb = CriteriaBuilder):

cb.between(
    cb.currentTimestamp(), 
        kampanjeArtikkelPriser.get(KampanjeArtikkelPris_.overstyrtSalgsprisPeriodeFra), 
        kampanjeArtikkelPriser.get(KampanjeArtikkelPris_.overstyrtSalgsprisPeriodeTil)),

但我收到以下语法错误:

  • 绑定不匹配:CriteriaBuilder 类型的泛型方法 between(Expression extends Y>, Y, Y) 不适用于参数(Calendar、Path、Path)。推断的类型 Path 不是有界参数 >
    • 绑定不匹配:CriteriaBuilder 类型的泛型方法 between(Expression extends Y>, Expression extends Y>, Expression extends Y>) 不适用于参数 (Expression, 路径,路径)。推断类型 Object&Serializable&Cloneable&Comparable extends Object&Serializable&Cloneable&Comparable>> 不是有界参数 >

是否可以将 Expression 转换为 Expression?我似乎有点卡住了,因为我还没有找到一种方法来做到这一点,而且据我所知,我也没有太多其他选择。更改实体 java 类型不是一种选择,因为这是一个有点大的系统,我不知道会产生什么样的影响。

【问题讨论】:

  • 这个选项有用吗,拉尔斯?
  • 您指的是哪个选项?它可能一次检查一个日期边界。在这种情况下,我不得不放弃 Criteria API 并改用本机查询,因为 hibernate 得到它的括号错误,因此也是查询的结果.. :)
  • 没有办法从 cb.currentTimestamp() 中创建一个 Path 吗?
  • 也许有,但我没有找到...

标签: java jpa calendar criteria-api


【解决方案1】:

似乎一个不错的选择是改为执行以下操作:

Calendar now = Calendar.getInstance();
cb.and(
    cb.lessThanOrEqualTo(kampanjeArtikkelPriser.get(KampanjeArtikkelPris_.overstyrtSalgsprisPeriodeFra), now),
    cb.greaterThanOrEqualTo(kampanjeArtikkelPriser.get(KampanjeArtikkelPris_.overstyrtSalgsprisPeriodeTil), now)
)

【讨论】:

  • 让问题保持开放,以防有人找到更好的解决方案——也许更具可读性。
猜你喜欢
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多