Hibernate 的事务提交,是如何控制的。
今天的工作中,遇到通过hibernate 操作db 的delete 、update 再load 的操作,取出的数据总是显示没有变化,而数据库中数据已经改变。对hibernate 的何时进行事务提交有些疑惑。调试再三,解决办法、想法记录如下。
SSH 层次,aop 设置事务,
<!-- 以 AspectJ 方式 定义 AOP -->
< aop:config proxy-target-class = "true" >
< aop:advisor pointcut = "execution(* com.icer.arco.*.service.*Manager.*(..))" advice-ref = "txAdvice" />
</ aop:config >
在Manager 中,调用dao.deleteObj(obj);
For(objList) //objList 是与obj 具相同外键的对象列表
{
dao.save(objList.get(i));// 更新其order 属性
}
Forward 至同一action 中另一method 中,load 出所有obj list ,显示至页面。
显示的居然还是未删除此对象前的数据,而此时查看数据库已无。
难道不是应该在action 中调用manager 完毕后提交session 吗?(aop 设置也是控制service 层)
没想明白。
后在delete 操作后,强制session flush ,ok 。
dao.getSessionFactory().getCurrentSession().flush();
dao.getSessionFactory().getCurrentSession().clear();
对hibernate 的session 和flush 机制还有待研究。