2013-07-12 32 views
2

我想要做SELECT e FROM Pedidos e WHERE e.diaPedido = :diaPedido AND e.horaPedido = :horaPedido
當我寫參數使用query.setParameter("diaPedido", fechaEscogida, TemporalTipe.DATE)query.setParameter("horaPedido", horaEscogida, TemporalTipe.TIME),但我不知道爲什麼第二個篩選器Temporal.TIME不工作,因爲仍然比較像TIMESTAMP
我使用eclipseLink 2.3.0javax.persistence 2.0.1
diaPedido and horaPedido都是oracle數據庫中的Date。Query.setparameter using TemporalTipe.Time

+0

TemporalType.TIME力量JPA使用您的java.util.Date,就好像它是一個java.sql.Time中。你沒有提到你遇到的問題,但時間沒有日期信息,只有時間部分。如果在日期對象中有日期信息,則使用與DATE類型相等的時間將不起作用。嘗試查看數據庫中的內容以及要發佈的內容 - 打開EclipseLink日誌記錄以正確打印SQL。機會是你應該使用TemporalType.Date。 – Chris

+0

但我只想比較小時:分鐘:秒不是全部日期。 –

回答

3

如果您只想比較TIMESTAMP列的時間部分,則需要使用數據庫函數。

在EclipseLink(> = 2.4)中,可以使用EXTRACT或CAST或FUNCTION/FUNC運算符來調用數據庫函數。

見, http://java-persistence-performance.blogspot.com/2012/05/jpql-vs-sql-have-both-with-eclipselink.html

+0

當我使用** CAST **給我錯誤,因爲'CAST('horaPedido',AS TIME)'說我** ** horaPedido **不是** NUMBER **。以及我如何提取** TIME **'EXTRACT(TIME,e.horaPedido)' –