0
有两个数据库表role和role_menu。 role_menu引用角色的主键有外键。如何捕获完整性约束删除错误?
现在我正在删除一行主表角色,该行有一个与role_menu关联的外键。我试图包围Try Catch中删除代码,但执行并不在catch块输入:
@Override
@Transactional
public void delete(String role_code) {
try {
sessionFactory.getCurrentSession().delete((Role) sessionFactory.getCurrentSession().get(Role.class, role_code));
} catch (Exception e) {
System.out.println("error : there is fk !");
}
}
在控制台中我得到了这些文本:
WARN : org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 2292, SQLState: 23000
ERROR: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - ORA-02292: integrity constraint (PTA.FK_ROLE_MEN_R_ROLE_ME_ROLE) violated - child record found
那么如何应对完整性约束缺失错误?
因为事务已经被标记为回滚,所以你不能在另一个级别捕获它。无论如何,这一切都是一个非常糟糕的主意,并打破了几个原则。 http://docs.jboss.org/hibernate/core/3.5/api/org/hibernate/Session.html“如果会话引发异常,则必须回滚事务并丢弃会话。会话的内部状态发生异常后可能与数据库不一致。“ – Gab
在另一个级别捕获异常意味着事务也在其他级别创建,然后传播到此函数中。 –