Это конкретная версия этого вопроса .
Я хочу проверить, вставляю ли я повторяющуюся строку. Должен ли я проверить это программно на уровне приложения:
if (exists(obj))
{
throw new DuplicateObjectException();
}
HibernateSessionFactory.getSession().save(obj);
или я должен поймать исключение, выданное слоем базы данных и сработавшее при нарушении противопоказания?
try
{
HibernateSessionFactory.getSession().save(obj);
}
catch(ConstraintViolationException e)
{
throw new DuplicateObjectException();
}
РЕДАКТИРОВАТЬ: Другими словами: хотя ограничение остается, (это хороший дизайн базы данных в любом случае, и я не могу быть уверен, что мое приложение будет единственным, получающим доступ к таблице) я должен полагаться на ограничение и обработать исключение, которое вызовет его нарушение, или я все равно лучше проверю?
EDIT2: Конечно, я проверяю + вставляю внутри транзакции, блокируя таблицу, чтобы убедиться, что никакой другой процесс не записывает другую запись за это время