Esta es una versión específica de this question.
Quiero comprobar si estoy insertando una fila duplicada. Debería comprobar que mediante programación en mi capa de aplicación:Lógica: base de datos o aplicación/2 (comprobación de restricciones)
if (exists(obj))
{
throw new DuplicateObjectException();
}
HibernateSessionFactory.getSession().save(obj);
o debería atrapar la excepción lanzada por la capa de base de datos y activa cuando violo la contraint?
try
{
HibernateSessionFactory.getSession().save(obj);
}
catch(ConstraintViolationException e)
{
throw new DuplicateObjectException();
}
EDIT: En otras palabras: a pesar de la restricción es para permanecer allí (que es un buen diseño de base de datos de todos modos, y no puedo estar seguro que mi aplicación va a ser el único acceso a la tabla) he de confiar en la restricción y manejar la excepción, se levantará su violación, o será mejor que compruebe de todos modos?
Edit2: Por supuesto que consultar + insertar dentro de una transacción, el bloqueo de la mesa para asegurar ningún otro proceso está escribiendo un nuevo récord en el ínterin