sql >> Databáze >  >> RDS >> Mysql

Jarní transakce a rollback na více stolech

Aktualizace mé odpovědi:

  1. Chcete, aby vaše metoda „uložení veřejné nabídky (nabídka cenové nabídky)“ byla transakční.
  2. když je tato metoda vyvolána ... transakce začíná v TransactionInterceptor az proxy je vyvoláno "veřejné uložení nabídky (nabídka cenové nabídky)"
  3. Řádek "quoteLineDao.delete(new Long(44));" funguje dobře
  4. Řádek "System.out.println("°°°°°°°°°°°°°°°°°°Řádek 44 odstraněn");" funguje dobře
  5. Řádek "quoteDao.save(quote);" dává výjimku porušení omezení. Transakce je označena jako rollback
  6. tuto výjimku zachycujete a využíváte a nešíříte výjimku
  7. Metoda "public Quote save(Citát citace) " vrátí hodnotu null kvůli řádku "return null;"
  8. Nyní kód dosáhne zachycovače transakcí, a protože u tohoto zachycovače nebyla žádná výjimka, pokusí se potvrdit, ale transakce je již označena jako vrácení zpět, a proto se nezdaří.

Řešení:- Výjimku nesmíte využívat a místo toho ji šířit kvůli vaší transakční potřebě.

Změnit na sledování. přidali příkaz throw.

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

Vysvětlení krok za krokem je k dispozici na tomto odkazu:Nelze potvrdit transakci JPA:Transakce označená jako rollbackOnly




  1. Mohu slepě nahradit všechny funkce mysql_ funkcí mysqli_?

  2. Někdo někdy použil PayPal Website Payments Standard s proměnnými SESSION?

  3. Nasazení relačních databází MySQL na Ubuntu 12.04 (Precise Pangolin)

  4. php vrací nedefinovanou vlastnost