事务注释不适用于自动装配构造器

时间:2019-07-02 08:19:29

标签: spring-data-jpa spring-batch autowired spring-transactions

我有以下情况:

@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注释?

1 个答案:

答案 0 :(得分:0)

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