*********************************************普通类
package com.gdc8888.implement;
import java.util.Iterator;
import java.util.List;import org.hibernate.Query;
import org.hibernate.Transaction;import com.gdc8888.hibernate.DAOBase;
import com.gdc8888.hibernate.HibernateSessionFactory;
import com.gdc8888.interfaces.ITblPCardType;
import com.gdc8888.interfaces.ITblPointCards;
import com.gdc8888.util.StringUtil;
import com.gdc8888.vo.TblPCardTypeVO;
import com.gdc8888.vo.TblPointCardsVO;
public class TblPointCardsImpl extends DAOBase  implements ITblPointCards {

private String newID=""; public boolean addPointCard(TblPointCardsVO vo) {
try {
Transaction tx=session.beginTransaction();
session.save(vo);
String radStr = vo.getPocaid() + StringUtil.randomString();
// vo.setPocaid(radStr);
// session.update(vo);
String sql="update TblPointCardsVO as vo set vo.pocaid=? where vo.pocaid=?";
Query query = session.createQuery(sql);
query.setString(0, radStr);
query.setString(1, vo.getPocaid());
query.executeUpdate();

//
tx.commit();
newID=radStr;

} catch (Exception e) {
System.out.println("添加卡的类型时出错");
e.printStackTrace();
return false;
}
return true;
}
public static void main(String[] args) {
TblPointCardsVO vo = new TblPointCardsVO();
ITblPointCards dao = new TblPointCardsImpl();
TblPCardTypeVO tvo = new TblPCardTypeVO();
tvo.setPcardmoney("100");
tvo.setPcardid(new Long(2));
vo.setPocapassword(StringUtil.randomString());
// vo.setPocaid("12");
vo.setTblpcardtype(tvo);
dao.addPointCard(vo);
System.out.println(vo.getPocaid()+"--------");}*********************************************普通类
*********************************************Servlet
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
String action = StringUtil.trim(request.getParameter("action"));
if ("createCardType".equals(action)) {
this.doCreateCardType(request, out);
return; } if ("createCards".equals(action)) {
TblPointCardsVO vo = new TblPointCardsVO();
ITblPointCards dao = new TblPointCardsImpl();
TblPCardTypeVO tvo = new TblPCardTypeVO();
tvo.setPcardmoney("100");
tvo.setPcardid(new Long(2));
vo.setPocapassword(StringUtil.randomString());
// vo.setPocaid("12");
vo.setTblpcardtype(tvo);
dao.addPointCard(vo);//<----------------到这里就出错了
System.out.println(vo.getPocaid()+"--------"); Iterator it = dao.queryAllPointCard().iterator();
while (it.hasNext()) {
System.out.println(((TblPointCardsVO) it.next()).getPocapassword());
}
*********************************************Servlet在这里调用dao.addPointCard(vo);的方法。很正常
在SERVLET里调用就出问题。
出错信息
21:20:43,812 ERROR [STDERR] org.hibernate.hql.ast.QuerySyntaxError: expecting "set", found 'as' near line 1, column 24 [update TblPointCardsVO as vo set vo.pocaid=? where vo.pocaid=?]
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.gdc8888.implement.TblPointCardsImpl.addPointCard(TblPointCardsImpl.java:34)
at com.gdc8888.servlet.ManagerServlet.doPost(ManagerServlet.java:110)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:595)
Caused by: line 1:24: expecting "set", found 'as'
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)
... 28 more到底怎么回事?请大家帮帮忙。谢谢。。

解决方案 »

  1.   

    String sql="update TblPointCardsVO as vo set vo.pocaid=? where vo.pocaid=?"; 
    这句sql中的as 去掉
      

  2.   

    呵。问题解决了。谢谢你了。只把as去掉是不行的。改成
    String sql="update TblPointCardsVO  set pocaid=? where pocaid=?"; 
    就可以了。但是原来的语句在原类的main方法可以运行的。
    这个问题。不知道怎么搞哈。
    谁能帮我解决这个疑问呢?
      

  3.   

    hpl和sql不同,表名->类名,表字段->类属性hibernate有show_sql属性配置,可以看到生成的sql
      

  4.   

    真有意思,你这个程序居然还不认别名呀
    我这里经常使用hql的别名,也没出来这种问题
    不管怎么样,解决了就好了,再发现问题到时候再讨论