新手求救
我用的是过滤器来管理事务,部分代码如下:
session = HibernateSessionFactory.getSession();
session.beginTransaction(); //开启事务
chain.doFilter(req, resp);  //执行相关代码
session.getTransaction().commit(); //提交事务
我在执行action的时候是先更新:
public Boolean modifyTime(Admin admin) {
Boolean b = false;
try {
session=AllSessionFactory.getSession();
int i=session.createSQLQuery("update admin set last_login_time=? where username='admin'")
.setParameter(0, admin.getLast_login_time())
.executeUpdate();
System.out.println("i="+i);
if(i>0){
b=true;
}

} catch (HibernateException e) {
e.printStackTrace();
}
return b;
}
在这里i的值为1,说明执行了的。
但最后数据库里面没有更新,说明事务没有提交,但没有出现任何的错误。而我就用junit测试的时候,就单独的写事务管理,这样就可以更新,请问我哪弄错了。过滤器不起作用吗,它应该也会提交的啊。郁闷中。。

解决方案 »

  1.   

    好像你们还没明白我的意思
    我是想用过滤器来做开启事务与提交事务工作,就像下面的这个代码:
    session = HibernateSessionFactory.getSession();
    session.beginTransaction(); //开启事务
    chain.doFilter(req, resp); //执行相关代码
    session.getTransaction().commit(); //提交事务
    当然过滤器我在web.xml里面配置好了的,过滤/*
    我就想让在操作数据(如dao)前开启事务,操作完成后提交事务的工作,每次执行的时候,sql语句发出来了,但没有真正的提交。不知为何???  是不是过滤器不能过滤*.action或者方法哦?  就是执行方法的时候不走过滤器。
      

  2.   

    请楼主检查两个地方:
    1 执行该方法的时候是否先执行了过滤器
    2 modifyTime中用AllSessionFactory.getSession()获取到的session是否为过滤器中的session