前提:
service层上面加了事务注解 dao层没加。
如果我的service里面调用dao层的类的方法。如果dao层里面的方法报错了。这个事情算不算在事务中?
如果在服务层中捕获的是dao层的异常,则这个异常必须抛出去,要不然不会回滚事务。如果捕获的是service层的异常,则不用抛出,会回滚。如图,代码中上部分是调用service层的方法,所以不用抛出异常。如果是dao层的,则需要抛出异常。如果没有try catch这种捕获异常 的代码 则不用担心。有异常会回滚。
你可以试下aservice调用bservice.save,但这两个service在一个类中 试验后推测: 捕获异常不抛出 不回滚
猜测:
咱们现在是把事物的注解放在类上面了,如果把事物的注解放到方法上面的话,我觉得就算是本类的两个service互相调用,捕获异常后还会回滚
这是为啥呢?在同一个service里,所以不能单独作为事务,所以异常捕捉了,就相当于没异常了?
而不再同一个service里。是两个事务进行合并,所以一有异常 不管是否捕捉,都会回滚?
而不再同一个service里。是两个事务进行合并,所以一有异常 不管是否捕捉,都会回滚?
我觉的spring是把有这个注解的类或方法做成一个代理来调用,每个代理都会检测是否有异常抛出,如果有就回滚,但service的事物有会自动传播,所以在最后提交时他发现有异常了就全部回滚了
特别感谢同事:侯哥
参考:
http://wenku.baidu.com/link?url=OrRd3F3nLRTa7SjqQlRXFamkGLpA4nlFPzVdQaFiF3MRadlbefjZrgmdyMhoujWdUzm585nF0FsVR5nBHFPIuV89pMlttmfYaHgS9XXW-hm
首先感谢下同事:侯哥。