2016-12-13 3 views
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 пройден, он должен получить все Pings за последние 30 секунд. Я получаю все Pings в базе данных. Даже те, кто старше, чем значение, которое я передаю.

С чем-то не так с моим запросом? Имеет ли это какое-либо отношение к тому, что я использую java.util.Date?

+0

Когда у меня возникла проблема с сопоставлением дат, выяснилось, что дата была усечена при вставке в базу данных, время даты всегда устанавливалось как полночь. Может быть, здесь что-то похожее? – Kerry

+0

Я подозреваю, что это имеет какое-то отношение к java.util.Date. Я бы просто сделал java.sql.Date. Просто выполните 'query.setParameter (« время », новый java.sql.Date (time.getTime())); – Orin

ответ

0

Я понял. Мне пришлось передать в TemporalType запрос paramater. В противном случае использовалась версия Date, у которой не было секунд.

query.setParameter("time", time,TemporalType.TIMESTAMP); 
Смежные вопросы