【发布时间】:2023-03-10 17:55:01
【问题描述】:
我有一个主 DB 处理程序方法,它调用其他方法,这些方法也与 BD 事物一起使用。
我给main方法加上@Transactional注解,因为如果出现问题我想回滚所有东西。
我的问题是:我是否应该也为子方法添加此注释,否则它会知道子方法是从事务性方法调用的。
比如在删除方法中出现异常,如何确保写入部分也会被回滚:
@Transactional
public void maintDbTings() {
writing();
deleting();
}
@Transactional //do I need this?
public void writing() {
//no exceptions
}
@Transactional //do I need this?
public void deleting() {
//exception occurs
}
【问题讨论】:
-
由于这些是公开的并且可以自己调用,我想您确实需要注释。只要确保他们没有不必要地创建自己的事务,并尽可能使用
mainDbThings事务。 -
但如果它们是私有的,并且只能从主方法调用?删除方法有异常,写方法会回滚吗?
-
澄清一下,如果方法是从 mainDbTings 调用的,则不需要这个,因为 mainDbTings 已经启动了一个事务(如果有的话)。但是,这些方法应该是私有的。如果它们可以在不通过 mainDbTings 的情况下被调用并且应该是事务性的,那么它们也应该被注释。
标签: java spring transactions rollback transactional