Как сказано в Spring docs, аннотации транзакций на уровне классов будут наследоваться дочерним классам.
Итак, как переопределить это поведение, например, у меня есть открытый метод в дочернем классе, и я не хочу этот методчтобы быть транзакционным.
Я попытался объявить метод дочернего класса с помощью
@ Transactional (распространение = Propagation.NOT_SUPPORTED)
, но все же он применяет конфигурацию транзакции из суперкласса.
@Service
@Transactional
public class EmployeeServiceImpl extends AbstractEmployeeServiceImpl {
private EmployeeDao employeeDao;
private AddressDao addressDao;
@Autowired
public EmployeeServiceImpl(EmployeeDao employeeDao, AddressDao
addressDao) {
this.employeeDao = employeeDao;
this.addressDao = addressDao;
}
// other service methods here ...
}
public interface OtherEmployService {
public void someMethod();
}
@Service
public class FooServiceImpl extends EmployeeServiceImpl implements OtherEmployService {
@Autowired
public FooServiceImpl(EmployeeDao employeeDao, AddressDao addressDao) {
super(employeeDao, addressDao);
}
@Override
@Transactional(propagation = Propagation.NOT_SUPPORTED) // it does not work, and still creates new transaction
public void someMethod() {
TransactionAspectSupport.currentTransactionStatus().isNewTransaction(); // provides new transaction
}
}
Итак, как я могу сделать некоторые методы () нетранзакционными?