项目框架:Strut1.2+Spring2.0+Hibernate3.1,由Spring管理所有Java类
每个xxxAction调用xxxService,xxxService调用xxxDAO(xxxDAO类为实现了HibernateSupport接口),我的关键代码如下:
// 用户修改个人信息
public ActionForward updateUser(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
Userinfo currentUser = (Userinfo) request.getSession().getAttribute(
"currentUser");
// 获取信息
String userpwd = request.getParameter("userpwd");
String email = request.getParameter("eamil");
String company = request.getParameter("company");
String companyproduct = request.getParameter("companyproduct");
String qq = request.getParameter("qq");
String tel = request.getParameter("tel");
String linkman = request.getParameter("linkman");
String linktel = request.getParameter("linktel");
// 修改,其中的getCurrentSession()方法是我自己在DAO里面写的,默认的getSession()方法是protected 类型的,无法直接调用
Userinfo user = (Userinfo) this.getUserinfoService().getUserinfoDAO()
.getCurrentSession().load(Userinfo.class, currentUser.getId());
Transaction tx=this.getUserinfoService().getUserinfoDAO()
.getCurrentSession().beginTransaction();
user.setUserpwd(userpwd);
user.setEmail(email);
user.setCompany(company);
user.setCompanyproduct(companyproduct);
user.setQq(qq);
user.setLinkman(linkman);
user.setLinktel(linktel);
user.setTel(tel);
System.out.println("userid="+user.getId());
this.getUserinfoService().getUserinfoDAO().getCurrentSession().flush();
tx.commit();
this.getUserinfoService().getUserinfoDAO().getCurrentSession().close();

return mapping.findForward("manageInfo");
}
本想修改用户信息,可是执行过程无任何异常,也能load出来对象,但就是数据库里面没有任何变化!!急急急!!!

解决方案 »

  1.   

    看你的代码
    user.setEmail(email); 
    user.setCompany(company); 
    user.setCompanyproduct(companyproduct); 
    user.setQq(qq); 
    user.setLinkman(linkman); 
    user.setLinktel(linktel); 
    user.setTel(tel); 
    System.out.println("userid="+user.getId()); 
    this.getUserinfoService().getUserinfoDAO().getCurrentSession().flush(); 
    tx.commit(); 你进行了提交不错,但是你并没有调用session的save方法进行持久化操作,你把user进行save操作后看下
      

  2.   

    就是在user.setTel(tel);后面加上this.getUserinfoService().getUserinfoDAO().getCurrentSession().save(user)不过我感觉你最好把后hibernate的事务管理用spring进行管理,你不感觉这样太麻烦了吗
      

  3.   

    你这个getCurrentSession获取到的应该是同一个session吧??
    this.getUserinfoService().getUserinfoDAO().getCurrentSession().flush(); 
    这句删掉看看,这句没必要用
      

  4.   

    谢谢以上各位的建议,尤其是xiaozejun同志,我对Spring的切入事务管理还不是太熟,需进一步学习-_-!,我调用了一个merge方法,也解决了,感觉不太好!!