Atu*_*tul 0 java mysql hibernate
环境: Hibernate 4 Tomcat 6
问题 :
我在 MySQL 数据库中有一个 DATETIME 类型的列(abhishekDate 是列名)。
我想将用户提供的日期与此 DATETIME 列进行比较。
但比较不应包括DATETIME 列的时间部分。比较应仅基于DATE 部分。
由于查询是动态的,因此我使用 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)
Run Code Online (Sandbox Code Playgroud)
但 abhishekDate 存在于 User 类(或表)中
代码 :
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));
Run Code Online (Sandbox Code Playgroud)
小智 5
我尝试了另一种方法,它对我有用。我检查表中的日期位于用户日期和用户日期加一天之间,如下所示。
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()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4585 次 |
| 最近记录: |