java - SpringBoot @Transactional 的翻译
问题描述
在我的代码中,我有一个带有updatePerson(Age age, Address address)
. 正在从 3 个不同的控制器调用此方法。现在由于控制器 1 中的一些要求,我不得不将一个附加字段作为updatePerson(Age age, Address address, Experience experience)
.
为了避免传入updatePerson(Age age, Address address, null)
其他 2 个控制器,我想在我的界面中将此方法转换为默认方法,并在内部调用其他方法。所以我的界面现在看起来像:
public interface PersonService
{
default PersonDO updatePerson(Age age, Address address) {
return updatePerson(Age age, Address address, null);
}
PersonDO updatePerson(Age age, Address address, Experience experience);
}
现在的问题是:在这个接口的实现中,原来updatePerson
的注释是@Transactional
. 我知道如果一个普通的方法调用一个用 注释的方法@Transactional
,事务就不能工作,因为它是由 spring 处理的。
所以在现在的实现中,我updatePerson(Age age, Address address, Experience experience)
用@Transactional 进行了注释。
直接调用的控制器updatePerson(Age age, Address address, Experience experience)
,执行将发生在一个事务中。但是我不确定当控制器调用它default updatePerson(Age age, Address address)
并且它在内部调用实现的方法时会发生什么?执行是否仍然发生在事务中?
解决方案
您可以添加@Transactional
到默认方法,因此它也将在事务内部
@Transactional
default PersonDO updatePerson(Age age, Address address) {
return updatePerson(Age age, Address address, null);
}
推荐阅读
- python - 以特定顺序递归生成子集解决方案
- java - 使用 JOption Pane 时,在 Canceled JOption Pane 期间,发生 NullPointerException
- mysql - PHPmyAdmin #1932 - 引擎中不存在
- google-cloud-transcoder - 谷歌云中的转码作业失败
- java - 泛型能力问题:地图
在签名中没有 K 和 V 的类/方法内部 - django - '在此服务器上未找到请求的资源。' django-rest-framework 和 pythonanywhere 中的错误
- amazon-cognito - 如何查看调用 AWS Cognito 功能(例如注册和登录)的日志?
- django - 如果 for 语句为空,则隐藏标题
- reactjs - Tailwind/typography 如何在 React 项目中与 markdown-it 配合使用?
- azure - 面向来宾的 Azure 许可和 MFA