这是一个关于此问题的具体版本。
我想要检查是否正在插入重复的行。我应该在我的应用程序层面进行编程检查吗?
if (exists(obj))
{
throw new DuplicateObjectException();
}
HibernateSessionFactory.getSession().save(obj);
或者我应该捕获由数据库层抛出并在违反约束时触发的异常?
try
{
HibernateSessionFactory.getSession().save(obj);
}
catch(ConstraintViolationException e)
{
throw new DuplicateObjectException();
}
编辑:换句话说:虽然限制条件必须保留(这是良好的数据库设计,而且我不能确定我的应用程序将是访问表的唯一方式),我应该依赖于限制条件并处理违规时引发的异常,还是我最好仍要进行检查?
编辑2:当然,在事务内检查+插入,锁定表以确保没有其他进程同时写入另一条记录。