日期:2014-05-20  浏览次数:20949 次

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类型才行呀.