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

ssh中事物问题
今天小弟做了一个测试,就是在ssh项目中使用aop方式添加事物,我发现当我操作一张表的时候事物是可以生效的,就想银行转账,这个其实就是一张表,两个用户的修改。这样事物正常发挥作用,但是,当如果在一个serviceImpl业务逻辑中如果是操作两张表,而且这个逻辑类引用的是两个dao。我发现这个时候事物好像不起作用,我猜想应该是他们是不同的dao在操作,可能使用的是不同的session.如果真的有这种需求就是要么同时让两张表的数据同时操作,要么同时失效。怎么弄。我想不用框架这个应该是可以实现的,让他们的session保持同一个就好,但是在ssh中怎么去控制他们的session一致呢。求大家给解答。

------解决方案--------------------
有一种事务锁啊
------解决方案--------------------
跟Session没关系。。。在serviceImpl的方法上添加事务传播属性Required,spring就会将该方法的操作当成一个事务提交了。
------解决方案--------------------
在声明式事务中,事务加在service层,在一个service方法中的session就应该是同一个
这要看你怎么获取的session,如果直接获取的HibernateDaoSupport的getSession或getSessionFactory().openSession即使是在事务中,事务也不会生效的。
通过hibernateTemplate模板方法或回调方法更新数据库就没问题了
------解决方案--------------------
应该没有被当成一个事务,你应该在把两个事务都调用的那个方法加事务的注解