sql >> Database teknologi >  >> RDS >> Mysql

Forårstransaktion og rollback på flere borde

Opdaterer mit svar:

  1. Du ønsker, at din "offentlige tilbudslagring(citattilbud)"-metode skal være transaktionsbestemt.
  2. når denne metode påkaldes ... begynder transaktionen i TransactionInterceptor og fra proxyen aktiveres "public Quote save(Quote quote)"
  3. Linje "quoteLineDao.delete(new Long(44));" fungerer fint
  4. Linje "System.out.println("°°°°°°°°°°°°°°°°°°°°Linje 44 slettet");" fungerer fint
  5. Linje "quoteDao.save(citat);" giver begrænsningsovertrædelse undtagelse. Transaktionen er markeret som rollback
  6. du fanger denne undtagelse og bruger den og udbreder ikke undtagelsen
  7. metoden "offentlig citat gem(citat citat) " vil returnere null på grund af linjen "return null;"
  8. Nu når koden frem til transaktionsopfangeren, og da der ikke var nogen undtagelse ved denne opfanger, forsøger den at foretage commit, men transaktionen er allerede markeret som tilbagerulning og mislykkes derfor.

Løsning:- Du må ikke forbruge undtagelsen og i stedet udbrede undtagelsen på grund af dit transaktionsbehov.

Skift til følgende. har tilføjet throw statement.

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;
}

Trin for trin forklaring er tilgængelig på dette link:Kunne ikke udføre JPA-transaktion:Transaktion markeret som rollbackOnly




  1. Liste over dato- og tidsfunktioner i SQL Server (T-SQL)

  2. Android JDBC virker ikke:ClassNotFoundException på driveren

  3. Returner en liste over partitionsfunktioner i SQL Server (T-SQL)

  4. Dvale> CLOB> Oracle :(