【问题标题】:Transactional annotation not working with Autowired constructor事务注释不适用于 Autowired 构造函数
【发布时间】:2019-11-12 20:20:54
【问题描述】:

我有以下情况:

@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-data-jpa spring-batch autowired spring-transactions


    【解决方案1】:

    使用这种方法,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 框架可以应用必要的注解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 2017-04-26
      • 2018-01-17
      • 2012-05-08
      • 2016-05-08
      相关资源
      最近更新 更多