【发布时间】:2014-02-11 11:03:11
【问题描述】:
我试图在我的 Spring/Hibernate 应用程序中使用 HQL 查询所有客户记录,这些客户记录的 DateAdded 在 Date1 和 Date2 之间或 LastSeen 在 Date1 和 Date2 之间,所以我在 Repository/DAO 类中构建了这个 HQL 查询:
sessionfactory.getCurrentSession().createQuery("from Customer c where c.dateAdded BETWEEN '"+startDate+"' AND '"+endDate+"' OR c.lastSeenDate BETWEEN '"+startDate+"' AND '"+endDate+"'").list();
我已调试应用检查 startDate 和 endDate 并发现它们发送为:
开始日期:2014 年 1 月 22 日星期三 01:16:57 HKT
结束日期:2014 年 1 月 29 日星期三 01:16:57 HKT
在 DB 中,我 100% 确定至少有一条记录满足此查询,因为这条记录 DateAdded 和 LastSeen 如下:
2014-01-23 15:33:38
2014-01-25 15:33:38
那么有人可以告诉我我做错了什么/在这里失踪了吗?
【问题讨论】:
-
我不确定当日期作为文本传递时如何在 HQL 中处理时区,但您应该真的使用查询参数而不是字符串连接。
-
@Guillaume 是专门或一般来说解决这个问题的?
-
@Guillaume 将其更改为 sessionfactory.getCurrentSession().createQuery("from Customer c where c.dateAdded BETWEEN :startD AND :endD").setParameter("startD", startDate).setParameter(" endD", startDate).list();还是不行:(
-
@Mchan
from Customer where dateAdded >= :startD and dateAdded <= :endD怎么样?我一直在使用类似的语法,它工作正常。如果这也不起作用,那么可能还有其他问题。 -
@AdrianShum 试过了,我尝试传递数据库中格式化的日期,但它不会接受,因为在我传递字符串时参数期望日期。