Spring事物管理和hibernate事物管理的疑问

08-10-16 liubin19820808
service的事物管理由spring控制,可是service中的dao的事物是由hibernate控制的.这样是不是事物不就是套在一起了吗?一个连接套另一个连接吗?

xmuzyu
2008-10-16 23:22
hibernate的事务由spring来管理,其实事务都是hibernate的。只不过用SH组合时,hibernate的事务由spring来管理,这样方便声明式事务管理。

freeren
2008-10-17 10:27
这样的事务只适合于程序级别的事务,如果有多个系统同时访问同一数据库就会可能有问题了--脏数据。

msfx1214
2008-10-17 14:21
其实对于Spring的事务我也有疑问,说出来希望大家帮忙解释下:
Spring的事务都是定义在业务层,我们一般叫Manager层,有的叫Service层,所以用Spring管理AOP声明事务的话,Manager层的每个方法应该都是在一个事务中的,那如果Manager中的方法调用Manager中的另一个的方法的话,Spring是先开启一个事务,当调用Manager中另外一个方法时是怎么样的呢,是先将当前事务挂起,再开一个事务,当调用结束提交事务,再继续前一个事务呢,还是由始至终都只在一个事务中呢,小弟搞JAVA不久,所以问题可能很简单希望大虾指教,谢谢!

freeren
2008-10-18 10:46
>>如果Manager中的方法调用Manager中的另一个的方法的话
Spring的事务管理也是其于hibernate的事务--程序级事务,hibernate的事务是依赖于hibernate的session。那么像你说的,一个方法调用另一个方法,这是同一个请求里发生的,那如果是基于SessionInView就是发生在一个session里,那么事务应该是共享的。

xmuzyu
2008-10-18 19:46
>>如果Manager中的方法调用Manager中的另一个的方法的话,Spring是先开启一个事务,当调用Manager中另外一个方法时是怎么样的呢,是先将当前事务挂起,再开一个事务,当调用结束提交事务,再继续前一个事务呢,还是由始至终都只在一个事务中呢,小弟搞JAVA不久,所以问题可能很简单希望大虾指教,谢谢!

这个是由你的事务属性决定的,比如required,requiredNew等,如果要支持嵌套事务,要求你的JDBC驱动支持savepoint。

jackwang
2008-10-19 18:51
楼上说的,建议看看事务的隔离和传播属性!

msfx1214
2008-10-20 13:30
谢谢各位的解答,看你们的回答意思是一般情况是只开启一个事务了,如果要开启嵌套事务还得另外配置了

liubin19820808
2008-10-27 18:24
明白了。thx