【问题标题】:HQL Comparing Dates [duplicate]HQL比较日期[重复]
【发布时间】:2014-05-15 19:31:17
【问题描述】:

我有以下疑问:

    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 列在同一天时,找不到匹配项。我认为 '

我认为这是因为一个是完整的时间戳而一个只是一个日期?我已经尝试过其他类似问题的建议,包括...

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

-在设置为参数之前使用日历去除时间分量

-使用天(e.startDate)

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

PostgreSQL 9.0 | JPA |休眠 3.6

谢谢!

【问题讨论】:

标签: hibernate hql


【解决方案1】:

如下所示:-

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);

【讨论】:

    【解决方案2】:

    查看Query.setDate()Query.setTimestamp() 方法并使用正确的方法代替Query.setParameter()

    【讨论】:

    • 对不起,我应该提到,我使用的是 JPA,所以它的 javax.persistence.Query 不是 org.hibernate.Query 所以我不能使用这些方法!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2011-08-09
    • 2012-06-25
    相关资源
    最近更新 更多