我有以下查询:
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);
Run Code Online (Sandbox Code Playgroud)
其中date是标准的java日期对象和startDate,endDate是没有时间的Postgresql日期(例如,在数据库中它们看起来像'2014-04-03')
但我发现当提供的日期参数与startDate列相同时,则找不到匹配项.我以为'='中的'='会处理这个问题?
我认为这是发生的,因为一个是完整的时间戳,一个只是一个约会?我已经尝试过其他类似问题的建议,包括......
- 使用SimpleDateFormat将日期转换为yyyy-MM-dd模式,然后使用DATE()在HQL中强制转换
- 在设置为参数之前,使用日历删除时间组件
- 使用日(e.startDate)<=日(日期)和月(e.startDate)=月(日期)等...
但没有一个有效.所以我的问题是,为什么这个日期比较不起作用和/或如何正确地将参数转换为日期?
PostgreSQL 9.0 | JPA | Hibernate 3.6
谢谢!
小智 6
检查Query.setDate(),Query.setTimestamp()方法和使用正确的,而不是Query.setParameter().
如下所示:-
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);
Run Code Online (Sandbox Code Playgroud)