日期:2014-05-18  浏览次数:20824 次

Hibernate + Servlet的一个奇怪的问题!搞了一天了。。烦啊。

*********************************************普通类
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