这是
this question的特定版本.
我想检查是否插入了重复的行.我应该在我的应用程序层中以编程方式检查它:
我想检查是否插入了重复的行.我应该在我的应用程序层中以编程方式检查它:
if (exists(obj)) { throw new DuplicateObjectException(); } HibernateSessionFactory.getSession().save(obj);
或者我应该捕获数据库层引发的异常并在违反约束时触发?
try { HibernateSessionFactory.getSession().save(obj); } catch(ConstraintViolationException e) { throw new DuplicateObjectException(); }
编辑:换句话说:虽然约束是保留的(无论如何它是好的数据库设计,我不能确定我的应用程序将是访问该表的唯一一个)我是否应该依赖约束并处理它的违规异常会提高,或者我最好还是检查一下?
EDIT2:我当然检查一个事务中的插入,锁定表以确保在此期间没有其他进程正在写另一个记录