【发布时间】:2010-09-15 02:14:53
【问题描述】:
这是this question 的特定版本。
我想检查我是否插入了重复的行。我应该在我的应用程序层中以编程方式检查它吗:
if (exists(obj))
{
throw new DuplicateObjectException();
}
HibernateSessionFactory.getSession().save(obj);
或者我应该捕获数据库层抛出的异常并在我违反约束时触发?
try
{
HibernateSessionFactory.getSession().save(obj);
}
catch(ConstraintViolationException e)
{
throw new DuplicateObjectException();
}
编辑: 换句话说:虽然约束仍然存在(无论如何这是很好的数据库设计,我不能确定我的应用程序将是唯一访问表的应用程序)我应该依赖约束并处理其违规将引发的异常,还是我最好还是检查一下?
EDIT2:我当然会在事务中进行检查+插入,锁定表以确保同时没有其他进程正在写入另一条记录
【问题讨论】:
标签: database business-logic-layer