Это потому, что вы вызываете метод @Transactional
из одного и того же компонента.
@Transactional
работает только для методов, вызванных для прокси, созданных Spring.Это означает, что когда вы создаете @Service
или другой компонент, метод, вызываемый извне, будет транзакционным.Если вызывается из bean-компонента, ничего не произойдет, поскольку он не проходит через прокси-объект.
Самое простое решение - переместить метод в другой @Service
или bean-компонент.Если вы действительно хотите сохранить его в том же компоненте, то вам нужно вызвать его, чтобы он был обернут в прокси с помощью Spring AOP.Вы можете сделать это следующим образом:
private YourClass self;
@Autowired
private ApplicationContext applicationContext;
@PostConstruct
public void postContruct(){
self = applicationContext.getBean(YourClass.class);
}
Тогда вызов метода self
приведет к открытию транзакции.