事务注解 相关问题

前提:

service层上面加了事务注解 dao层没加。



 如果我的service里面调用dao层的类的方法。如果dao层里面的方法报错了。这个事情算不算在事务中? 

如果在服务层中捕获的是dao层的异常,则这个异常必须抛出去,要不然不会回滚事务。如果捕获的是service层的异常,则不用抛出,会回滚。如图,代码中上部分是调用service层的方法,所以不用抛出异常。如果是dao层的,则需要抛出异常。如果没有try catch这种捕获异常 的代码 则不用担心。有异常会回滚。

 你可以试下aservice调用bservice.save,但这两个service在一个类中 试验后推测:  捕获异常不抛出 不回滚 

猜测:

 咱们现在是把事物的注解放在类上面了,如果把事物的注解放到方法上面的话,我觉得就算是本类的两个service互相调用,捕获异常后还会回滚 

 这是为啥呢?在同一个service里,所以不能单独作为事务,所以异常捕捉了,就相当于没异常了?
而不再同一个service里。是两个事务进行合并,所以一有异常 不管是否捕捉,都会回滚? 

 我觉的spring是把有这个注解的类或方法做成一个代理来调用,每个代理都会检测是否有异常抛出,如果有就回滚,但service的事物有会自动传播,所以在最后提交时他发现有异常了就全部回滚了 

特别感谢同事:侯哥 

参考:
http://wenku.baidu.com/link?url=OrRd3F3nLRTa7SjqQlRXFamkGLpA4nlFPzVdQaFiF3MRadlbefjZrgmdyMhoujWdUzm585nF0FsVR5nBHFPIuV89pMlttmfYaHgS9XXW-hm

首先感谢下同事:侯哥。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring框架提供了多种方式来管理事务,其中最常用的是使用事务注解事务注解是通过在方法或类上添注解来实现事务管理的。常用的事务注解有以下几种: 1. `@Transactional`:将该注解到方法或类上,表示该方法或类需要进行事务管理。可以设置一些属性来定义事务的隔离级别、传播行为、回滚规则等。 2. `@EnableTransactionManagement`:将该注解到配置类上,启用Spring的事务管理功能。 3. `@TransactionalEventListener`:将该注解到方法上,用于处理事务相关的事件。 使用事务注解的步骤如下: 1. 在Spring配置文件中添 `<tx:annotation-driven />` 或者在配置类上添 `@EnableTransactionManagement` 注解,启用Spring的事务管理功能。 2. 在需要进行事务管理的方法或类上添 `@Transactional` 注解,指定事务的属性。 示例代码如下: ```java @Transactional public void doSomething() { // 事务处理逻辑 } ``` 需要注意的是,事务注解只对公有方法起作用,默认只对运行时异常进行回滚。如果想对其他类型的异常进行回滚,可以使用 `rollbackFor` 属性。 除了使用事务注解,还可以通过编程方式来管理事务,即使用编程式事务管理。这种方式需要手动在代码中开启、提交、回滚事务,相对来说比较繁琐。 希望以上信息对你有帮助!如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值