org.hibernate.hql.ast.QuerySyntaxError: expecting "set", found 't' near line 1, column 13 [update Test t set t.sname=?,t.saddress=?,t.sage=?,t.semail=? where t.sid=?]
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:63)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:215)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:127)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:83)
at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:427)
at org.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:884)
at org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:865)
at org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:89)
at com.runboo.dao.hibernate.mainHibernateDAO.Update(mainHibernateDAO.java:137)
at com.runboo.web.action.action.UpdateAction.execute(UpdateAction.java:55)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.runboo.filter.CharactorEncodingFilter.doFilter(CharactorEncodingFilter.java:25)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)
Caused by: line 1:13: expecting "set", found 't'
at antlr.Parser.match(Parser.java:211)
at org.hibernate.hql.antlr.HqlBaseParser.setClause(HqlBaseParser.java:337)
at org.hibernate.hql.antlr.HqlBaseParser.updateStatement(HqlBaseParser.java:183)
at org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:133)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:209)
... 29 more
为什么我的Update语句总是不执行,并且有这样的异常;

解决方案 »

  1.   

    hql中可以直接执行sql如果执行hql的话这样试一试:update Test set sname=:name,saddress=:address,sage=:age,semail=:mail where sid=:id 
      

  2.   

    请贴出源代码 
    我只能看出你HQL语句有语法错误
      

  3.   

    update Test set sname=?,saddress=?,sage=?,semail=? where sid=?
      

  4.   


          HQL语句中的类名后面不要加别名试试.
      

  5.   

    update Test AS t set t.sname=?,t.saddress=?,t.sage=?,t.semail=? where t.sid=?
      

  6.   

    update Test AS t set t.sname=?,t.saddress=?,t.sage=?,t.semail=? where t.sid=?
      

  7.   

    update Test  set sname=?,saddress=?,sage=?,semail=? where sid=?不要使用别名
      

  8.   

    public boolean Update(Test t){
    boolean flag=false;
    try {
    System.out.println("sname:"+t.getSname());
    System.out.println("saddress:"+t.getSaddress());
    System.out.println("sage:"+t.getSage());
    System.out.println("semail:"+t.getSemail());
    System.out.println("sid:"+t.getSid());
    session=sef.openSession();
    Transaction tran=session.beginTransaction();
    String hql="update Test set sname=?,saddress=?,sage=?,semail=? where sid=?";
    Query q=session.createQuery(hql);
    q.setString(0,t.getSname());
    q.setString(1,t.getSaddress());
    q.setLong(2,new Long(t.getSage()));
    q.setString(3,t.getSemail());
    q.setLong(4,new Long(t.getSid()));
    q.executeUpdate();
    tran.commit();
    session.close();
    } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
    }finally{

    }
    return flag;
    }这一段是代码 
      

  9.   

    关于update,delete的HQL语句不要加别名.
      

  10.   

    HQL语句不对吧, set后面.....
      

  11.   

    不管是HQL还是SQL都是不对的
    update database-name set...
      

  12.   

    你这hql真是。
    session.update(对象)
    应该是Test把
    下面直接
    对象点setxxx
    ================
    你写的那是sql
    就不要createquery了
    ================
    你用了hibernate的执行方法
    写的却是sql。
    (@#*(#@(*%(@)……%()@#%
      

  13.   

    update后的表名 不要用别名,set的时候也直接用属性 不要用 别名.属性, 如果是几张表关联,在from 的地方+别名,但是set 后面不能用别名