当前位置:网站首页>@Transactional 事务调用与生效场景总结
@Transactional 事务调用与生效场景总结
2022-08-02 20:53:00 【浮生若梦l】
1.同一个类中 事务publicA掉非事务B B抛异常 AB事务生效(具有传播性)
@Override
@Transactional
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
B();
}
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
//促发异常
if(3/0==1)
System.out.println("");
}2.同一个类中 事务A掉非事务B A抛异常 AB事务生效
@Override
@Transactional
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
B();
//促发异常
if(3/0==1)
System.out.println("");
}
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
}
3.同一个类中 事务A掉事务B A抛异常 AB事务生效
@Override
@Transactional
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
B();
//促发异常
if(3/0==1)
System.out.println("");
}
@Transactional
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
}4.同一个类中 事务A掉事务B B抛异常 AB事务生效
@Override
@Transactional
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
B();
}
@Transactional
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
//促发异常
if(3/0==1)
System.out.println("");
}5.同一个类中 非事务A掉事务B B抛异常 A无事务 B事务不生效
@Override
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
B();
}
@Transactional
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
//促发异常
if(3/0==1)
System.out.println("");
}6.同一个类中 非事务A掉事务B(通过注入-相当于调用不同类中的B方法) B抛异常 A无事务,B事务生效
@Override
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
userService.B();
}
@Transactional
@Override
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
//促发异常
if(3/0==1)
System.out.println("");
}7.同一个类中 非事务A掉事务B(通过注入) A抛异常 A无事务,B不促发事务,ab数据都会增加成功
@Override
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
userService.B();
//促发异常
if(3/0==1)
System.out.println("");
}
@Transactional
@Override
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
}8.同一个类中 事务A掉非事务B(通过注入)A或B抛异常 AB事务生效 (事务传播性)
@Transactional
@Override
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
userService.B();
//促发异常
if(3/0==1)
System.out.println("");
}
@Override
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
}总结:1.事务A掉B ,AB都有事务(事务传播性)2.非事务A掉事务B,A都无事务,B只有通过注入(AOP)方式调用的时候,B的事务才生效。3.private不能加事务 4.声明式事务如果要细化,可以拆分方法
边栏推荐
- The five classification of software testing
- golang刷letcode:公平分发饼干
- 汉源高科2光12电千兆导轨式网管型工业以太网交换机双光自愈保护式以太网光交换机
- 传感器工作原理
- 解道8-编程技术5
- 李沐动手学深度学习V2-bert和代码实现
- Jar包启动通过ClassPathResource获取不到文件路径问题
- Informatics Olympiad All-in-One (1260: [Example 9.4] Intercepting Missiles (Noip1999))
- golang 刷leetcode:将字符串翻转到单调递增
- Informatics orsay a tong (1258: 【 9.2 】 digital pyramid)
猜你喜欢

Li Mu hands-on deep learning V2-BERT pre-training and code implementation

Bee 事务注解 @Tran 使用实例

php 单引号 双引号 -> => return echo

Jar包启动通过ClassPathResource获取不到文件路径问题

用了TCP协议,就一定不会丢包吗?

引用类型 ,值类型 ,小坑。

.NET performance optimization - you should set initial size for collection types

华为设备配置BFD多跳检测

「每周译Go」这次我们来点不一样的!--《How to Code in Go》系列上线

李沐动手学深度学习V2-bert和代码实现
随机推荐
你所不知道的C#中的细节
golang刷leetcode: 小于等于 K 的最长二进制子序列
Swin Transformer 论文精读,并解析其模型结构
sre成长之路
y85.第四章 Prometheus大厂监控体系及实战 -- prometheus告警机制进阶、pushgateway和prometheus存储(十六)
【C语言进阶】--指针典题剖析
YARN资源调度系统介绍
ACE JET NPOI
Mysql用户管理
千人优学 | GBase 8s数据库2022年6月大学生专场实训圆满结束
信息学奥赛一本通(1259:【例9.3】求最长不下降序列)
golang刷leetcode:统计区间中的整数数目
如何理解 swing 是非线程安全 (原创)
接口测试常用工具及测试方法(入门篇)
HCIP--BGP基础实验
封装和包、访问修饰权限
汉源高科2光12电千兆导轨式网管型工业以太网交换机双光自愈保护式以太网光交换机
[C题目]力扣142. 环形链表 II
Li Mu hands-on deep learning V2-BERT pre-training and code implementation
Packages and packages, access modifiers