У меня есть объект, который имеет 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 пройден, он должен получить все Pings
за последние 30 секунд. Я получаю все Pings
в базе данных. Даже те, кто старше, чем значение, которое я передаю.
С чем-то не так с моим запросом? Имеет ли это какое-либо отношение к тому, что я использую java.util.Date
?
Когда у меня возникла проблема с сопоставлением дат, выяснилось, что дата была усечена при вставке в базу данных, время даты всегда устанавливалось как полночь. Может быть, здесь что-то похожее? – Kerry
Я подозреваю, что это имеет какое-то отношение к java.util.Date. Я бы просто сделал java.sql.Date. Просто выполните 'query.setParameter (« время », новый java.sql.Date (time.getTime())); – Orin