0
我有了一個NameQuery
像這樣的實體:JPA日期比較不工作
@Entity
@Table(name = "ping")
@NamedQueries({
@NamedQuery(name = "Ping.getPingsOlderThan", query = "SELECT p FROM Ping p WHERE p.pingTime > :time")
})
public class Ping extends BaseModel implements Serializable{
...
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "ping_time")
private Date pingTime;
我稱之爲NamedQuery
形式驗證碼:
public List<Ping> getPingsOlderThan(Integer seconds) {
Calendar now = Calendar.getInstance();
//make sure seconds is negative, so it subtracts
seconds = seconds > 0 ? seconds * -1 : seconds;
now.add(Calendar.SECOND, seconds);
Date time = now.getTime();
try{
Query query = getEntityManager().createNamedQuery("Ping.getPingsOlderThan");
query.setParameter("time", time);
return query.getResultList();
}
catch(Exception e){
logger.log(Level.SEVERE, "Could not get pings",e);
return null;
}
}
基本上它得到所有Pings
這是老年人比秒的傳遞(至少那是它應該做的)。所以如果傳入30,它應該在最後30秒內獲得所有Pings
。我得到的全部是數據庫中的Pings
。即使是那些比我傳入的值還要大的值。
我的查詢有什麼問題嗎?這與我使用java.util.Date
這個事實有什麼關係?
當我有一個比較日期的問題時,事實證明日期被插入數據庫時被截斷,日期時間總是設置爲午夜。也許這裏發生了類似的事情? – Kerry
我懷疑它與java.util.Date有關。我只會做一個java.sql.Date。只要做'query.setParameter(「time」,new java.sql.Date(time.getTime()));' – Orin