java - 在 PostgreSQL 的时间戳列上使用 Hibernate 进行日期查询

标签 java hibernate postgresql orm date

一个表有时间戳列。其中的示例值可能是 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() 是否包括这两个限制?文档对此没有任何说明。

最佳答案

, I would like to know if there is way to match only the date part of the timestamp column.

如果您不需要 TIMESTAMP,请使用 DATE(您不应该使用 type="date" 吗?)。

Also, is Expression.between() inclusive of both limits?

SQL BETWEEN 运算符的行为似乎是database dependent .使用 PosgresQL,BETWEEN 表达式:

x BETWEEN y AND z

在语义上等同于:

y <= x AND x <= z

即包容性。

关于java - 在 PostgreSQL 的时间戳列上使用 Hibernate 进行日期查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2543510/

相关文章:

java - 自动化脚本 : is it possible to find particular text on the screen?

java - 注释匿名内部类

java - 当链接对象的 FK 可能为空时按链接对象属性排序?

postgresql - 是否出现在 group by 子句中或用于聚合函数中?

Postgresql:使用主键备份和恢复一些表

java - 使用 JavaScript 更改 JSP 自定义标记的 JSP 自定义属性值

java - Joda Time 操纵

java - Postgis 点数据类型未持久化到数据库中

java - 如果我只有 ID,如何在 JPA2 中持久保存多对多集合?

ruby-on-rails - Rails 并将多边形数据 (geojson) 插入到 postgis 表中