JPA日期比较不起作用

时间:2016-12-13 19:34:58

标签: java jpa jpql

我有一个像NameQuery这样的实体:

@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

的事实有关

1 个答案:

答案 0 :(得分:0)

我明白了。我必须将TemporalType传递给查询参数。否则,它使用的Date版本没有秒。

query.setParameter("time", time,TemporalType.TIMESTAMP);
相关问题