Mijn antwoord bijwerken:
- U wilt dat uw "public Quote save (Quote quote)"-methode transactief is.
- wanneer deze methode wordt aangeroepen ... begint de transactie in de TransactionInterceptor en vanaf de proxy wordt "public Quote save(Quote quote)" aangeroepen
- Regel "quoteLineDao.delete(new Long(44));" werkt prima
- Line "System.out.println("°°°°°°°°°°°°°°°°°°°Line 44 verwijderd");" werkt prima
- Regel "quoteDao.save(quote);" geeft beperking overtreding uitzondering. Transactie is gemarkeerd als terugdraaien
- je vangt deze uitzondering en consumeert deze en verspreidt de uitzondering niet
- methode "public Quote save(Quote quote)" retourneert null vanwege de regel "return null;"
- Nu bereikt de code de transactie-interceptor en aangezien er geen uitzondering was bij deze interceptor, probeert deze vast te leggen, maar de transactie is al gemarkeerd als terugdraaien en mislukt daarom.
Oplossing:- U moet de uitzondering niet gebruiken en in plaats daarvan de uitzondering verspreiden vanwege uw transactiebehoefte.
Wijzig naar volgen. hebben een throw-statement toegevoegd.
try{
quoteLineDao.delete(new Long(44));
System.out.println("°°°°°°°°°°°°°°°°°°Line 44 deleted");
return quoteDao.save(quote);
} catch(Exception e){
Logger.getLogger(QuoteService.class).log(Logger.Level.ERROR, e);
throw e;
}
Stap voor stap uitleg is beschikbaar in deze link:Kon JPA-transactie niet uitvoeren:transactie gemarkeerd als rollbackOnly