首页 文章

使用Hibernate Criteria API进行日期比较

提问于
浏览
0

Environment : Hibernate 4 Tomcat 6

Issue :

我在MySQL数据库中有一个DATETIME类型的列(abhishekDate是列名) .
我想将用户提供的日期与此DATETIME列进行比较 .

但比较 should NOT INCLUDE DATETIME列的时间部分 . 比较应基于 DATE part only.

由于查询是动态的,我使用的是Criteria API . 但是我无法使用Criteria API实现相同的功能 . 我试过下面的代码,但它不起作用 .

你能帮忙写一下如何编写这个查询吗?

我使用正确的方法吗?

我得到的例外是:

Mar 08, 2016 9:26:59 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet mvc-dispatcher threw exception
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'abhishekDate' in 'where clause'
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
    at com.mysql.jdbc.Util.getInstance(Util.java:381)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3558)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3490)

但abhishekDate存在于User类(或表)中

Code :

Criteria criteria = getSession().createCriteria(User.class);
Conjunction and = Restrictions.conjunction();

and.add(Restrictions.sqlRestriction("year(abhishekDate) = ? ",abhishekDate,org.hibernate.type.StandardBasicTypes.DATE));
and.add(Restrictions.sqlRestriction("month(abhishekDate) = ? ",abhishekDate,org.hibernate.type.StandardBasicTypes.DATE));
and.add(Restrictions.sqlRestriction("day(abhishekDate) = ? ",abhishekDate,org.hibernate.type.StandardBasicTypes.DATE));

1 回答

  • 4

    我尝试了另一种方式,它对我有用 . 我检查表中的日期是在用户日期和用户日期加上一天之间,如下所示 .

    Calendar cal = Calendar.getInstance();
    cal.setTime(userDate);
    cr.add(Restrictions.ge("yourDate", cal.getTime()));
    cal.add(Calendar.DATE, 1);
    cr.add(Restrictions.le("yourDate", cal.getTime()));
    

相关问题