在java的service方法里怎么才算是一个数据库会话?和事务关系是什么?

比如
class ServiceA{
@Transactional
public void methodA(){
mapper1.method1();
mapper2.method2();
serviceB.methodB();
}
}
class ServiceB{
@Transactional(propagation=Propagation.required_new)
public void methodB(){
.....
}
}

那当调用ServiceA.methodA是不是就开启了一次数据库会话,但是有两次事务

是的,ServiceA.methodA() 方法是 使用了@Transactional 注解,会开启事务,当调用serviceB.methodB();方法的时候,由于 serviceB.methodB();的@Transactional(propagation=Propagation.required_new)标注要求新的事务,所以会将 ServiceA的事务挂起,创建一个新的事务,也就是会开启两个事务

这个知识点属于Spring的事务传播机制,一般和这个知识点和一起的还有事务的隔离级别,题主可以去了解下。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-02-07

    @Transactional,生效需要serviceA 实现接口。Aop 代理开启事务。 service b同理

    事务的传播级别默认是request,ServiceB 上的是required_new 会新开启一个事务。会有两个事务。