这是this question的特定版本。
我想检查我是否插入重复行。我应该以编程方式检查它在我的应用程序层:逻辑:数据库或应用程序/ 2(约束检查)
if (exists(obj))
{
throw new DuplicateObjectException();
}
HibernateSessionFactory.getSession().save(obj);
,或者我应该赶在数据库层抛出,引发异常时,我违反了该限制?
try
{
HibernateSessionFactory.getSession().save(obj);
}
catch(ConstraintViolationException e)
{
throw new DuplicateObjectException();
}
编辑:换句话说:虽然约束是有保留(这是很好的数据库设计,无论如何,我不能肯定我的应用程序将是唯一一个访问表)应我靠在约束条件下处理违规行为将会引发的异常,或者我最好还是检查一下?
EDIT2:当然,我做检查+在事务内插入,锁表,以确保没有其他进程正在写另一个纪录同时