Mysql
 sql >> база данни >  >> RDS >> Mysql

Пролетна транзакция и връщане назад на множество таблици

Актуализирам отговора си:

  1. Искате методът ви „public Quote save(Quote quote)“ да бъде транзакционен.
  2. когато този метод се извика... транзакцията започва в TransactionInterceptor и от проксито се извиква „public Quote save(Quote quote)“
  3. Ред „quoteLineDao.delete(new Long(44));“ работи добре
  4. Ред "System.out.println("°°°°°°°°°°°°°°°°° Ред 44 е изтрит");" работи добре
  5. Ред „quoteDao.save(quote);“ дава изключение за нарушение на ограничението. Транзакцията е маркирана като връщане назад
  6. вие улавяте това изключение и го консумирате, а не разпространявате изключението
  7. методът "public Quote save(Quote quote) " ще върне null поради ред "return null;"
  8. Сега кодът достига до прехващача на транзакции и тъй като нямаше изключение в този прихващач, той се опитва да извърши ангажимент, но транзакцията вече е маркирана като връщане назад и следователно не успява.

Решение:- Не трябва да използвате изключението и вместо това да го разпространявате поради вашите транзакционни нужди.

Промяна на следното. са добавили изявление 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;
}

Обяснението стъпка по стъпка е достъпно на тази връзка:Транзакцията на JPA не можа да се извърши:Транзакцията е маркирана като rollbackOnly




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL - Дайте ми 3 посещения само за всеки тип

  2. Bash Script Loop през MySQL

  3. Кое от съпоставянето на utf8 е най-доброто?

  4. Знак ISO-8859-1 съкращава текст, вмъкващ се в utf-8 mysql колона

  5. Миграцията на база данни на Ruby on Rails не създава външни ключове в MySQL таблици