【发布时间】:2011-02-02 08:45:09
【问题描述】:
一个表有时间戳列。其中的一个示例值可能是 2010-03-30 13:42:42。使用 Hibernate,我正在执行范围查询 Restrictions.between("column-name", fromDate, toDate)。
该列的Hibernate映射如下。
<property name="orderTimestamp" column="order_timestamp" type="java.util.Date" />
假设我想找出日期为 2010 年 3 月 30 日和 2010 年 3 月 31 日的所有记录。对该字段的范围查询如下。
Date fromDate = new SimpleDateFormat("yyyy-MM-dd").parse("2010-03-30");
Date toDate = new SimpleDateFormat("yyyy-MM-dd").parse("2008-03-31");
Expression.between("orderTimestamp", fromDate, toDate);
这不起作用。
查询被转换为各自的时间戳,如“2010-03-30 00:00:00”和“2010-03-31 00:00:00”。因此,2010 年 3 月 31 日的所有记录都将被忽略。
解决此问题的一个简单方法是将结束日期设为“2010-03-31 23:59:59”。但是,我想知道是否有办法只匹配时间戳列的日期部分。
另外,Expression.between() 是否包含这两个限制?文档对此没有任何启示。
【问题讨论】:
-
我相信 between 在两个限制上总是排他的。你为什么不只删除 1 毫秒并为它们每个添加 1 毫秒?
-
@jishi 它依赖于数据库(我相信大部分时间都包括在内)。
-
Shashikant 你能解决这个问题吗?
标签: java hibernate postgresql orm date