日期:2014-05-19  浏览次数:20707 次

用hibernate管理事务,先更新再查询时,更新不成功,郁闷。
新手求救
我用的是过滤器来管理事务,部分代码如下:
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 执行该方法的时候是否先执行了过滤器
2 modifyTime中用AllSessionFactory.getSession()获取到的session是否为过滤器中的session