Mam dwie klasy:
PodanieTradycyjneService.java
@Service
@Scope
@Transactional
public class PodanieTradycyjne {
@Autowired
PodanieTradycyjneRepository podanieTradycyjneRepository;
public void rejestruj(PodanieDTO podanieDTO) {
Set<ConstraintViolation<PodanieDTO>> cvSet = validator.validate(podanieDTO, Rejestracja.class);
if (!cvSet.isEmpty()) {
throw new ConstraintViolationException(cvSet); //tu podanie elektroniczne nie spelnia wymogow walidacyjnych i rzuca blad
}
podanieTradycyjneService.rejestruj(podanieDTO); // Tutaj metoda wola repository i robi save
}
}
PodanieElektroniczneService.java
@Service
@Scope
@Transactional
public class PodanieElektroniczneService {
@Autowired
PodanieTradycyjneService podanieTradycyjneService;
@Autowired
PodanieTradycyjneRepo podanieTradycyjneRepo;
public void rejestrujPodanieElektroniczne() {
podanieTradycyjneService.rejestruj();
podanieTradycyjneRepo.save()// tutaj zapisuje dodatkowa encje, ktorej nie zapisuje przy podaniu tradycyjnym
}
}
ERROR:
org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly
Domyślam się, że chodzi o to, że jest transakcja w transakcji. I podczas rzucania wyjątku PodanieElektroniczneService chce zrobić rollbacka. Ale nie wiem jak to sensownie rozwiązać.
Jakieś pomysły?