日期字段上的时间范围搜索的休眠条件

时间:2012-01-31 23:01:08

标签: java hibernate jqgrid oracle10g

我正在使用 Oracle 10g,Hibernate 3,springMVC,jqgrid。我在ORACLE中有一些 Date 字段,其映射如下

@Temporal(TemporalType.DATE)
@Column(name = "DOC_CREATION_DATE", length = 7,insertable=true,updatable=false)
public Date getDocCreationDate() {
    return this.docCreationDate;
}

在我的网格中,我使用jqueryCalendar过滤日期,一切都很好。 现在我有来自客户的新请求,即显示 documentCreation 的时间,他们也希望能够按时过滤范围。例如:

查找在上午6点和下午7点之间创建的所有记录,查找在上午6点创建的所有记录。

我已尝试使用

格式化日期字段
@Temporal(TemporalType.TIMESTAMP)

这不是他们想要的

有没有其他方法解决这个问题,如何实现这一点的任何好主意都是非常受欢迎的。

问题是我需要使用相同的映射字段在Jqgrid的一列中查询常规日期( 12/01/2012 使用jqueryCalendar)和为完成相同的映射字段的时间部分添加另一列我需要查询 (休眠标准) 的时间列时间范围 像这样的模拟:

...
 criteria.add(Restrictions.ge("docCreationDate.mappedFieldTimePart",6AM ));

谢谢你的帮助

2 个答案:

答案 0 :(得分:3)

列的类型映射到Time,因此您必须将其值与Time:

进行比较
Time sixAM = Time.valueOf("06:00:00");
criteria.add(Restrictions.ge("docCreationDate.mappedFieldTimePart", sixAM));

您还可以使用常规日期:

Date sixAM = new SimpleDateFormat("HH:mm").parse("06:00");
criteria.add(Restrictions.ge("docCreationDate.mappedFieldTimePart", sixAM));

答案 1 :(得分:1)

您必须更改@Temporal注释以使用TemporalType.TIMESTAMP或添加其他字段并使用TemporalType.TIME进行注释。 Hibernate使用@Temporal注释来确定该字段是否被视为java.sql.Timestampjava.util.Date,其时间为lopped-off(设置为午夜,或00h 00m 00.0s)。这允许开发人员在他们的应用程序中的任何地方使用java.util.Date,而不必担心Timestamp类(它从我们的大部分代码库中消失)。