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]
请求大家帮忙 

解决方案 »

  1.   

    使用命名参数。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();
      

  2.   

    这个不能用jdbc来做的 他是在这个hibernate的框架上的 如果用jdbc越过框架来操作 我会被经理砍的 呵呵 
    不过还是解决了 呵呵
    谢谢楼上2位了辛苦了
      

  3.   

    tbClass.classinfoEnterTime 这个也要是java.util.Date类型才行呀.
      

  4.   

    请问楼主是怎么解决的,我遇到这个问题,发现
    str="from LiveApplication c where c.appLiveInfo.appTime="+apptime+
         "and c.name='"+name+"'";  不行
    str="from LiveApplication c where c.appLiveInfo.appTime='"+apptime+"'"+
         "and c.name='"+name+"'";   也不行