Java hibernate时间戳条件查询
我有一个表,它有一列提交日期(没有时区的时间戳)。我需要列出表中的所有记录,其中有一个特定日期作为提交日期。但是不要考虑数据库中的时间。我使用criteria查询和hibernate检索记录。如何忽略这里的时间 实际上,我从客户端传递了一个日期,并且必须检索与提交日期相同的记录。但不必考虑时间。< / P>Java hibernate时间戳条件查询,java,hibernate,timestamp,criteria,Java,Hibernate,Timestamp,Criteria,我有一个表,它有一列提交日期(没有时区的时间戳)。我需要列出表中的所有记录,其中有一个特定日期作为提交日期。但是不要考虑数据库中的时间。我使用criteria查询和hibernate检索记录。如何忽略这里的时间 实际上,我从客户端传递了一个日期,并且必须检索与提交日期相同的记录。但不必考虑时间。< / P> else if(extjsFilter.getField().equals("submittedDate")) { Strin
else if(extjsFilter.getField().equals("submittedDate")) {
String str_date=extjsFilter.getValue();
SimpleDateFormat format1 = new SimpleDateFormat("MM/dd/yyyy");
SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");
Date date2 = format1.parse(str_date);
String datenew = format2.format(date2);
Date date = (Date)format2.parse(datenew);
if(extjsFilter.getType().equals("date"))
{
if(extjsFilter.getComparison().equals("gt"))
{
Filter postDateFilterGT = getSession().enableFilter("jobFilterPostDateGT");
postDateFilterGT.setParameter("postDateFilterGT", date);
}
if(extjsFilter.getComparison().equals("lt"))
{
Filter postDateFilterLT = getSession().enableFilter("jobFilterPostDateLT");
postDateFilterLT.setParameter("postDateFilterLT", date);
}
if(extjsFilter.getComparison().equals("eq"))
{
Filter postDateFilterEQ = getSession().enableFilter("jobFilterPostDateEQ");
postDateFilterEQ.setParameter("postDateFilterEQ", date);
}
}
}
上面是我的代码。客户端是使用extjs完成的。extjs筛选一个日期字段的服务器端代码如下
下面给出了hibernate
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.hiringsteps.ats.job.domain">
<class
name="Job"
table="hs_job_master">
<id name="id" column="job_id" unsaved-value="null">
<generator class="sequence">
<param name="sequence">hs_job_id_seq</param>
</generator>
</id>
<property name="submittedDate" column="submitted_date"/>
<filter name="jobFilterPostDateGT"><![CDATA[submitted_date > :postDateFilterGT]]></filter>
<filter name="jobFilterPostDateLT"><![CDATA[submitted_date < :postDateFilterLT]]></filter>
<filter name="jobFilterPostDateEQ"><![CDATA[:postDateFilterEQ = submitted_date]]></filter>
</class>
<filter-def name="jobFilterPostDateGT">
<filter-param name="postDateFilterGT" type="date"/>
</filter-def>
<filter-def name="jobFilterPostDateLT">
<filter-param name="postDateFilterLT" type="date"/>
</filter-def>
<filter-def name="jobFilterPostDateEQ">
<filter-param name="postDateFilterEQ" type="date"/>
</filter-def>
</hibernate-mapping>
hs_作业_id_seq
:postDateFilterGT]]>
我在数据库中有两条记录,提交日期如下
2013-02-15 00:00:00
2013-02-15 13:04:42.787
当我查询筛选日期为“今天”的记录时,第一条日期为“提交日期”的记录
2013-02-15 00:00:00仅检索
这是因为我用来查询的日期对象也有这个值
“2013-02-15 00:00:00”
如何进行忽略时间部分的查询?只需对“提交日期”列对应的属性条件添加一个限制即可。你可以这样写
criteria.add(Restrictions.eq("submittedDate"), '2013-02-15');
为此,您必须应用一个限制,选择submittedDate和submittedDate+1之间的所有日期
//Resticts the dates between start date 0000 hrs and end date 0000 hrs
criteria.add(Restrictions.ge("startDate", sDate));
criteria.add(Restrictions.lt("endDate", eDate));
在您的情况下,startDate=2013-02-15
结束日期=2013-02-16您可以尝试下面的代码,它利用本机Oracle
trunc
函数在比较时丢弃时间
criteria.add(Restrictions.sqlRestriction("trunc(submitted_date) = ?", submittedDate, org.hibernate.type.StandardBasicTypes.DATE));
<>你可以根据数据库提供者修改函数。你能解释一下“但是不考虑数据库中的时间”是什么意思吗?你试过了吗?你的问题不清楚没有时间考虑什么?系统时间还是数据库时间?执行时间?再次更新问题我面临同样的问题,我必须解决它,找到给定日期的第二天并获取数据GE startDate和LT endDate。日期参数应该是您要与之比较时间的参数。我再次更新了问题。请你检查一下我使用hibernate过滤器的情况好吗。我将如何使用过滤器?我有同样的问题,我必须用同样的逻辑解决它第二天找到并获取记录GE'date'和LT'nextdate'