spring-data-jpa - 事务注释不适用于 Autowired 构造函数
问题描述
我有以下情况:
@Service
public class MyService {
private final MyRepository repository;
@Autowired
public MyService(MyRepository repository){
this.repository = repository;
}
public List<Data> getData(){
return repository.findAll();
}
@Transactional
public void saveData(Data data){
repository.save(data);
}
}
当我调用该saveData
方法时,@Transactional
未应用注释并且该方法抛出 TransactionRequiredException。
如何启用@Transactional
注释?
解决方案
使用这种方法,Spring 出于某种原因错误地初始化了 bean 并且没有应用注解。
我发现的一种解决方法是使用字段自动装配而不是构造函数自动装配。像这样:
我有以下情况:
@Service
public class MyService {
@Autowired
private MyRepository repository;
public List<Data> getData(){
return repository.findAll();
}
@Transactional
public void saveData(Data data){
repository.save(data);
}
}
这样 bean 被正确代理,AOP 框架可以应用必要的注解。
推荐阅读
- html - html/php 中的一个表单中的多个提交按钮
- javascript - 单击在 Retina 屏幕上的某个缩放级别上不起作用 - Mac OS X
- tomcat - 设置 Tomcat 的 RECYCLE_FACDES = true 的缺点?
- scheme - 不确定如何输入带指数的分数方程
- python - 循环遍历列表直到语句为真
- qr-code - 使用 CIQRCodeDescriptor 生成 QR 码 initWithPayload: symbolVersion: maskPattern errorCorrectionLevel:
- linux - Datamash:根据 bash 中的组将列转换为行
- primefaces - Primefaces Schedule不在月视图上呈现事件背景颜色
- javascript - 计数输入数 onchange
- python - 如何将 Python 转义字符与 MatLab 命令结合起来?