sql >> Databasteknik >  >> RDS >> Mysql

Vårtransaktion och återställning på flera bord

Uppdaterar mitt svar:

  1. Du vill att din "public Quote save(Quote quote)"-metod ska vara transaktionsbaserad.
  2. när denna metod anropas ... börjar transaktionen i TransactionInterceptor och från proxyn anropas "public Quote save(Quote quote)"
  3. Rad "quoteLineDao.delete(new Long(44));" fungerar bra
  4. Rad "System.out.println("°°°°°°°°°°°°°°°°°°°°rad rad 44 raderad");" fungerar bra
  5. Rad "quoteDao.save(quote);" ger begränsningsöverträdelse undantag. Transaktionen är markerad som återställning
  6. du fångar detta undantag och konsumerar det och sprider inte undantaget
  7. metoden "public Quote save(Quote quote) " returnerar null på grund av raden "return null;"
  8. Nu når koden transaktionsinterceptor och eftersom det inte fanns något undantag vid denna interceptor, försöker den utföra men transaktionen är redan markerad som rollback och misslyckas därför.

Lösning:- Du får inte konsumera undantaget och istället sprida undantaget på grund av ditt transaktionsbehov.

Ändra till följande. har lagt till throw-sats.

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

Steg för steg förklaring finns på denna länk:Det gick inte att genomföra JPA-transaktionen:Transaktionen markerad som rollbackOnly




  1. Hur man stänger en markör ordentligt i Android

  2. MySQL InnoDB dött lås på SELECT med exklusivt lås (FÖR UPPDATERING)

  3. Hur man uppnår PCI-kompatibilitet för MySQL &MariaDB med ClusterControl - The Replay

  4. 4 sätt att lista vyerna i en SQLite-databas