@Transactional 事务调用与生效场景总结

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.声明式事务如果要细化,可以拆分方法

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮生若梦l

你的鼓励实我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值