我正在尝试跟踪查询并获得意外的令牌:异常

时间:2015-09-12 05:33:40

标签: java hibernate

public boolean insert(Product product){       
        boolean result = true;
        Transaction tx = null; 
        int quantity=0;
        try {
            tx = session.getTransaction();
            tx.begin();

            Query query=session.createQuery("update Stock s set s.quantity=s.quantity+100");
            query.executeUpdate();
            session.saveOrUpdate(product); 

            tx.commit();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            result=false;
        } finally {
            session.close();
        }        
        return result;
}

选择,保存和删除查询正在成功运行,但这个例外我只是在更新记录时才得到....

我想在产品表中保存记录,以及更新Stock表

以下是我的异常

org.hibernate.hql.internal.ast.ErrorCounter reportError
ERROR: line 1:8: unexpected token: in
Sep 12, 2015 10:34:41 AM org.hibernate.hql.internal.ast.ErrorCounter reportError
ERROR: line 1:8: unexpected token: in
line 1:8: unexpected token: in
    at org.hibernate.hql.internal.antlr.HqlBaseParser.updateStatement(HqlBaseParser.java:239)
    at org.hibernate.hql.internal.antlr.HqlBaseParser.statement(HqlBaseParser.java:169)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:295)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:203)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:131)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:93)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167)
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1836)
    at in.edu.pondiuni.service.ProductService.insert(ProductService.java:23)
    at in.edu.pondiuni.controller.ProductServlet.processRequest(ProductServlet.java:53)
    at in.edu.pondiuni.controller.ProductServlet.doGet(ProductServlet.java:91)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

1 个答案:

答案 0 :(得分:3)

如果确定执行的查询,我会尝试使用另一个包名,in是保留关键字,而可能是问题,这将对应于位置8:

UPDATE in.edu.pondiuni.xxx.Stock
       ^
       8

为此,在in.edu.pondiuni的代码库中进行搜索和替换应该可以胜任,例如,您可以将其替换为edu.pondiuni