我有以下查询:
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
谢谢!
答案 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);