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
在另一個級別捕獲異常意味着事務也在其他級別創建,然後傳播到此函數中。 –