RuntimeException, для которого вы не предназначены
попробовать / поймать.
Говорит кто? У вас нет , чтобы поймать RuntimeException
, но ничто не мешает вам это сделать, это вполне приемлемо. Например, существует подкласс DataAccessException
, называемый RecoverableDataAccessException
, который специально предназначен для перехвата, чтобы можно было попытаться повторить попытку. Также есть OptimisticLockingFailureException
, который решает вашу следующую проблему транзакционных конфликтов из-за оптимистической блокировки, а также может специально обрабатываться приложением.
Если вы используете что-то вроде
SimpleJdbcTemplate каждый запрос является его
собственная транзакция
Не правда. Если вы используете транзакционную семантику Spring , тогда SimpleJdbcTemplate
(или любой используемый вами компонент DAO) будет участвовать в транзакции с полной семантикой ACID, если ее поддерживает база данных и управление транзакциями (что большинство должно). В случае вашего примера вы можете выполнить select for update
(или то, что поддерживает ваша база данных) после insert
, все в одной транзакции.
Уровень доступа к данным Spring, вероятно, является его лучшей функцией, но он редко получает за это кредит.