У меня есть вопрос о распространении в аннотации @Transactional.Мне нужно сделать две операции в одном методе, и каждая из них должна быть в собственной транзакции, после которой выполняется фиксация.
@Service
@Transactional
public class FakturaServiceImpl implements FakturaService {
@Override
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public Integer przyjmijZaliczkeNaPodstPlatnosci(Integer platnoscId) {
Platnosc plat = Optional.ofNullable(platDao.findOne(platnoscId))
.orElseThrow(() -> new RecordNotExistsException("Platnosc", platnoscId));
// here should be beginning of transaction
Integer faktId = utworzFaktureZaliczkowaNaPodstPlatnosci(plat);
// commit
// start new transaction
rachotwMgr.dodajRachotwDlaZaliczekNaFakturze(faktId);
// commit
// ...
return faktId;
}
@Override
public Integer utworzFaktureZaliczkowaNaPodstPlatnosci(Platnosc plat) {
// Here not starting new transaction, it's still Propagation.NOT_SUPPORTED
rachotwMgr.naliczRachotwDlaRezerwacji(rezId, true); // this line is in new transaction
// Continue in Propagation.NOT_SUPPORTED
}
}
@Service
@Transactional
public class RachotwServiceImpl implements RachotwService {
@Override
@Transactional
public List<Rachotw> dodajRachotwDlaZaliczekNaFakturze(@NotNull Integer fakturaId) {
// Here starts new transaction..
}
}
Является ли моя идея одним методом с Propagation.NOT_SUPPORTED и двумя методами с правом Propagation.REQUIRED(после того, как utworzFaktureZaliczkowaNaPodstPlatnosci () и dodajRachotwDlaZaliczekNaFakturze () следует совершить)?
1005 * Почему utworzFaktureZaliczkowaNaPodstPlatnosci (), который Propagation.REQUIRED (по умолчанию) не запускается новую транзакцию и dodajRachotwDlaZaliczekNaFakturze () и naliczRachotwDlaRezerwacji () начинает новую транзакцию,Как заставить utworzFaktureZaliczkowaNaPodstPlatnosci () начать новую транзакцию?