Spring: Catch ConstraintViolationException во время фиксации - PullRequest
1 голос
/ 25 февраля 2012

Я использую Hibernate и Spring, и в настоящее время я застрял с чем-то, что, как я думал, будет очень легко исправить. У меня есть метод обслуживания, подобный этому:

@Transactional
public void deleteObject(ObjectClass object)
{
    this.objectClassDAO.delete(object);
}

Мне нужно отобразить дружеское сообщение, когда пользователь пытается удалить объект, связанный с другим объектом. Проблема, с которой я столкнулся, заключается в том, что ConstraintViolationException генерируется до тех пор, пока не будет вызван commit (), который выходит за пределы области действия моего метода службы. Есть ли способ позволить Spring вызывать некоторый промежуточный код в случае определенного исключения, чтобы я мог установить правильное сообщение об ошибке?

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

1 Ответ

2 голосов
/ 25 февраля 2012

Возможно, вы используете FlushMode.AUTO, и исключение выдается при завершении транзакции (в прокси вокруг вашего сервиса, созданного Spring).Вы можете явно вызвать Session.flush() внутри метода objectClassDAO.delete().Обычно вы не хотите этого делать, но в этом случае это вызовет синхронизацию с базовым постоянством, и в случае нарушения ограничения будет сгенерировано исключение до возврата objectClassDAO.delete.Хотя это может быть последним средством.

...