2010-04-13 2 views
0

Привет им работать над проектом с использованием HibernateDaoSUpport из моего Daos с весной & весной-WS & зимует & Postgres, которые будут использоваться в национальном приложении (означает много пользователей)Работы с SQLException с весной, спящий режим и Postgres

На самом деле, каждое исключение из спящего режима автоматически преобразуется в какое-то определенное значение SpringAccesException.

У меня есть таблица с ключевым словом на dabatase & уникальное ограничение по ключевым словам: не допускается дублирование ключевых слов.

Я нашел несколько способов справиться с этим в Вставить Дао: 1- Проверить дубликат вручную (с выбором) перед вставкой. Я имею в виду, что весенняя транзакция будет иметь уровень изоляции SERIALIZABLE. Очевидным недостатком является то, что мы теперь имеем 2 запросов для простого insert.Advantage: независимые базы данных

2-пусть вкладыш пошел & Поймать SqlException & преобразовать его в дружелюбных сообщение & ErrorCode к конечному потребителю нашего WebServices.

Решение 2: Весна разработала способ перевода конкретных исключений в индивидуальные исключения. см. http://www.oracle.com/technology/pub/articles/marx_spring.html

В моем случае у меня было бы исключение ConstraintViolationException.

В идеале я хотел бы написать пользовательский SQLExceptionTranslator для сопоставления дублирующего ограничения слов в базе данных с помощью DuplicateWordException.

Но я могу иметь множество уникальных ограничений в одной таблице. Так что я должен получить сообщение SQLEXceptions, чтобы найти имя ограничения, объявленного в таблице , например, «uq_duplicate-constraint». Теперь у меня есть сильная зависимость от базы данных.

Заранее спасибо за ваши ответы & простите меня за мой бедный английский (это не мой родной язык)

+0

Есть ли какие-либо вопросы в вашем посте? Чего вы пытаетесь достичь? – zoidbeck

ответ

0

По моему опыту, всегда лучше иметь свою проверку данных в приложении, а не зависеть от базы данных , Это позволяет ограничить роль вашей базы данных в хранилище данных, что означает, что бизнес-логика не будет распространяться на два уровня.

Что происходит, если у вас есть транзакция базы данных, которая одновременно прерывает два ограничения? В этом случае ваш подход к сопоставлению исключений будет только улавливать первый сбой, а не некоторый код проверки, который может показать все проблемы проверки данных при попытке сохранить.

Смежные вопросы