读书人

hibernate中运用hql语句判断时间大小,

发布时间: 2012-03-23 12:06:21 作者: rapoo

hibernate中运用hql语句判断时间大小

Java code
  String hql = "from TbNoMainClassInfo tbClass where tbClass.classinfoEnterTime <= "+semVO.getSemBeginDate()+" and tbClass.classinfoGraduatTime >="+semVO.getSemEndDate();

SemVO是一个对象,它的俩个方法都是返回java.util.Date类型 classinfoEnterTime与classinfoGraduatTime在数据库中也都是date类型。
我这样写系统报错。请问在hql中如何判断时间先后。
Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: 00 near
line 1, column 125 [from com.twi.aicoa.teach.nomainclassinfo.hibernate.TbNoMain
ClassInfo tbClass where tbClass.classinfoEnterTime <= 2009-02-12 00:00:00.0 and
tbClass.classinfoGraduatTime >=2009-02-20 00:00:00.0]
请求大家帮忙

[解决办法]
使用命名参数。

http://doc.javanb.com/hibernate-reference-3-2-0-zh/ch10s04.html
10.4.1.4. 绑定参数
接口Query提供了对命名参数(named parameters)、JDBC风格的问号(?)参数进行绑定的方法。 不同于JDBC,Hibernate对参数从0开始计数。 命名参数(named parameters)在查询字符串中是形如:name的标识符。 命名参数(named parameters)的优点是:

命名参数(named parameters)与其在查询串中出现的顺序无关

它们可在同一查询串中多次出现

它们本身是自我说明的

//named parameter (preferred)
Query q = sess.createQuery("from DomesticCat cat where cat.name = :name");
q.setString("name", "Fritz");
Iterator cats = q.iterate();
//positional parameter
Query q = sess.createQuery("from DomesticCat cat where cat.name = ?");
q.setString(0, "Izi");
Iterator cats = q.iterate();
//named parameter list
List names = new ArrayList();
names.add("Izi");
names.add("Fritz");
Query q = sess.createQuery("from DomesticCat cat where cat.name in (:namesList)");
q.setParameterList("namesList", names);
List cats = q.list();

[解决办法]
tbClass.classinfoEnterTime 这个也要是java.util.Date类型才行呀.

读书人网 >J2EE开发

热点推荐