2013-01-08 2 views
1

Я пытаюсь реализовать уникальное ограничение по значению в поле, используя JPA и Hibernate с RequestFactory (GWT 2.5). Мои другие ограничения выполняются с использованием JSR303, и я хотел бы сообщать о нарушениях клиенту тем же способом (вызов onConstraintViolation в Receiver). Насколько я понимаю, лучшим вариантом реализации этого типа ограничения является установка unique = true при использовании атрибута @Column. Затем это принудительно выполняется базой данных при совершении транзакции и позволяет избежать любых условий гонки, связанных с утверждением уникальности посредством запросов.Как обрабатывать RollbackException, вызванное ConstraintViolationException с RequestFactory

Я последовал за this thread's советом по внедрению ServiceLayerDecorator, чтобы обернуть метод invoke с началом и фиксацией транзакции. Если ограничение уникальности нарушено, операция фиксации будет вызывать RollbackException.

Как обработать это исключение, чтобы оно распространялось на клиент как нарушение ограничения вместо общего отказа?

Насколько я могу судить, глядя на SimpleRequestProcessor, валидация происходит отдельно от вызова, и, похоже, не существует очевидного способа распространения отказов от invoke таким образом.

ответ

0

Вы можете попытаться реализовать пользовательское ограничение для проверки уникальности. См. Также https://community.jboss.org/wiki/AccessingTheHibernateSessionWithinAConstraintValidator.

+0

Спасибо за предложение. Я рассмотрел ваш подход, но существует условие гонки, в результате которого проверка может завершиться успешно, но фиксация завершится неудачей, потому что другая транзакция совершила сначала и написала то же значение для этого поля. Если бы у меня мог быть мой торт и есть его :) –

+0

Точно. В этом отношении есть предупреждение в самой странице вики. Просто подумал, что я указываю тебе. Конечно же, вы имеете дело только с проверкой Bean. Если вы хотите, чтобы одна часть была проверкой Bean и другими ограничениями базы данных, вы действительно хотите съесть торт и сохранить его ;-) – Hardy

+0

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

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

  • Нет связанных вопросов^_^