Spring - как собирать информацию при откате в декларативном управлении транзакциями - PullRequest
2 голосов
/ 26 сентября 2010

Может ли кто-нибудь сказать мне, если это безопасно и рекомендуется перехватывать SQL и другие исключения в методах @Transactional? Когда используется программное управление транзакциями, я могу просто перехватить исключение и сделать все, что захочу, но я не знаю, не нарушу ли я транзакционную систему AOP, перехватив эти исключения, которые в противном случае вызвали бы откат ... если я сделать это декларативным способом.

Я полагаю, что есть прокси, которые создают логическую транзакцию с отдельным соединением для методов @Transactional в советах AOP. И им нужно перехватить исключение «я хочу перехватить» и откатить транзакцию.

Ответы [ 2 ]

1 голос
/ 27 сентября 2010

Вы можете пометить транзакцию программно как только для отката, используя этот код

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

См. Откат декларативной транзакции в Spring Reference .

Но это не рекомендуется, потому что вы тесно связываете свой код с платформой Spring.


Возможно, если вы делаете это более чем в одном месте, вам следует ввести вспомогательный метод, что-то вроде TransactionUtils.rollbackCurrentTransaction().Таким образом, если вы решите изменить свой транзакционный подход (или, не дай бог, отойти от весны), вам нужно будет изменить только один метод.

0 голосов
/ 27 сентября 2010

Что вы описали, так это то, как Spring знает, следует ли инициировать откат транзакции.Если вы проглотите исключение, у Spring никогда не будет шанса узнать, что он должен откатить транзакцию.

...