JPA将Expression <timestamp>转换为Expression <calendar> </calendar> </timestamp>

时间:2014-03-28 12:27:40

标签: java jpa calendar criteria-api

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

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

但是我收到以下语法错误:

  
      
  • 绑定不匹配:CriteriaBuilder类型(Expression&lt;?extends Y&gt;,Y,Y)之间的通用方法不适用于参数(Calendar,Path&lt; Calendar&gt;,Path&lt; Calendar&gt;)。推断类型    路径&LT;日历&GT;不是有界参数的有效替代&lt; Y extends Comparable&lt;?超级Y&gt;&gt;   
        
    • 绑定不匹配:CriteriaBuilder类型(Expression&lt;?extends Y&gt;,Expression&lt;?extends Y&gt;,Expression&lt;?extends Y&gt;)之间的通用方法不适用于参数(Expression&lt; Timestamp&gt;,   路径&lt; Calendar&gt;,Path&lt; Calendar&gt;)。推断类型Object&amp; Serializable&amp; Cloneable&amp; Comparable&lt;?扩展了Object&amp; Serializable&amp; Cloneable&amp; Comparable&lt;?&gt;&gt;不是有界参数&lt; Y extends的有效替代   可比&LT ;?超级Y&gt;&gt;
    •   
  •   

是否可以转换Expression&lt; Timestamp&gt;到表达式&lt; Calendar&gt;?我似乎有点陷入困境,因为我还没有办法做到这一点,而且据我所知,我也没有其他选择。更改实体java类型不是一个选项,因为这是一个有点大的系统,我不知道会产生什么样的影响。

1 个答案:

答案 0 :(得分:0)

似乎一个好的选择是做以下事情:

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