HQL比较日期

时间:2014-04-03 19:03:36

标签: hibernate hql

我有以下查询:

    StringBuilder sb = new StringBuilder("select e from Event e");
    sb.append(" where e.user = :user and e.activated = true and e.startDate <= :date and uc.endDate >= :date");
    Query query = this.getEntityManager().createQuery(sb.toString());
    query.setParameter("user", user);
    query.setParameter("date", date);

其中date是标准的java日期对象和startDate,endDate是没有时间的Postgresql日期(例如,在数据库中它们看起来像'2014-04-03')

但我发现当提供的日期参数与startDate列相同时,则找不到匹配项。我以为'&lt; ='中的'='会处理这个问题吗?

我认为这种情况正在发生,因为一个是完整的时间戳,一个只是一个约会?我已经尝试过其他类似问题的建议,包括......

- 使用SimpleDateFormat将日期转换为yyyy-MM-dd模式,然后使用DATE()转换为HQL

- 使用日历删除时间组件,然后再将其设置为参数

- 使用日(e.startDate)&lt; = day(date)AND month(e.startDate)= month(date)等...

但没有一个有用。所以我的问题是,为什么这个日期比较不起作用和/或如何正确地将参数转换为日期?

PostgreSQL 9.0 | JPA | Hibernate 3.6

谢谢!

2 个答案:

答案 0 :(得分:6)

查看Query.setDate()Query.setTimestamp()方法并使用正确的方法,而不是Query.setParameter()

答案 1 :(得分:2)

如下所示: -

Query q = em.createQuery("select o from LoadFileHistory o where o.finishDate > :today ");
q.setParameter("today",todaysDateObject,TemporalType.DATE);
q.getResultList();


select o from Operation o
where o.merchantId = :merchantId
and o.captureLimitDate < :maxDateTime
query.setParameter("maxDateTime", maxDateTime, TemporalType.TIMESTAMP);