2014-03-28 106 views
0

我嘗試做以下(CB = CriteriaBuilder):JPA轉換表達<Timestamp>來表達<Calendar>

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

,但我得到了以下語法錯誤:

  • Bound mismatch: The generic method between(Expression<? extends Y>, Y, Y) of type CriteriaBuilder is not applicable for the arguments (Calendar, Path<Calendar>, Path<Calendar>). The inferred type Path<Calendar> is not a valid substitute for the bounded parameter <Y extends Comparable<? super Y>>
    • Bound mismatch: The generic method between(Expression<? extends Y>, Expression<? extends Y>, Expression<? extends Y>) of type CriteriaBuilder is not applicable for the arguments (Expression<Timestamp>, Path<Calendar>, Path<Calendar>). The inferred type Object&Serializable&Cloneable&Comparable<? extends Object&Serializable&Cloneable&Comparable<?>> is not a valid substitute for the bounded parameter <Y extends Comparable<? super Y>>

有沒有可能來將表達式<時間戳>複製到表達式<日曆>?我似乎有點卡住,因爲我沒有找到辦法做到這一點,並且據我所見,我也沒有多少其他選擇。更改實體java類型不是一個選項,因爲這是一個有點大的系統,我不知道會有什麼樣的影響。

+0

這篇選項工作,拉爾斯? – carbontax

+0

你的意思是哪個選項?它可能一次檢查一個日期邊界。在這種情況下,我不得不放棄Criteria API並使用原生查詢,因爲休眠得到它的括號是錯誤的,因此也是查詢的結果。:) –

+0

有沒有辦法使路徑出cb .currentTimestamp()? – carbontax

回答

0

這似乎是一個不錯的選擇是做,而不是執行以下操作:

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

如果有人發現更好的解決方案 - 可能更具可讀性,請保持開放狀態。 –

相關問題