hibernate3關聯映射表的級聯關系維護
--Could not execute JDBC batch update問題解決
sparta-紫杉 10/4/22 13:40
開發環境: eclipse3.4.2 + weblogic10.3 + jdk1.6.0_13 + Struts2.1.8 + Spring3.0.1 + Hiberante3.3.2
在開發權限管理系統的過程中,我使用了Spring security3這個開源組件。
這個開源組件功能是比較強大的,但是對于國人開發人員來說,存在不能用數據庫動態管理用戶、角色、權限、資源的缺陷(當然有對于用戶和權限的動態管理,但不適合國人開發人員)。為了滿足采用數據庫動態管理用戶、角色、權限、資源這個要求,筆者擴展了security3,除了建立上述4個表之外,還建立了用戶和角色的關聯表、角色和權限的關聯表、權限和資源的關聯表共計7張表。并為上述的7張表開發相關的設置模塊。
就用戶和角色的關系來說,允許一個用戶關聯多個角色,它們之間是一對多的關系。
就角色和權限的關系來說,允許一個角色關聯多個權限,它們之間是一對多的關系。
就權限和資源的關系來說,允許一個權限關聯多個資源,它們之間是一對多的關系。
限于篇附,僅介紹角色和權限維護及關聯關系維護的模塊,并且僅介紹相關的保存和刪除的代碼。角色表為Sys_Roles、權限表為Sys_Authorities、兩者的關聯表為Sys_Roles_Authorities。在角色和權限的關聯關系維護頁面,可以允許用戶添加角色;并且可以通過某個角色查找到與該角色相關的權限列表;還可以根據某個角色,通過checkbox選中多個權限列表,以保存該角色與多個權限之間的關系。
在此給出必要的相關代碼,到于SSH2如何配置,如何部署運行,請參考相關的其他文章。
一、Action-控制層代碼




























二、dao-持久層代碼





























































三、表的hibernate配置文件SysRoles.hbm.xml



































值得一提的是,在記錄下本文之前,在刪除某個角色的過程中Weblogic的后臺出現了“Could not execute JDBC batch update”的錯誤,這個錯誤的解決耗費了不少時間,隨著問題的明朗化,不斷地加深對hibernate的認識。這個錯誤的原因就是因為沒有為角色表的hibernate配置文件設置級聯關系,從而在刪除角色時,因為在用戶角色表和角色權限表中已經有與該角色相關的記錄,因此Oracle會報出“ORA-02292:違反完整約束條件”的錯誤,使整個刪除動作失敗。
解決的方法很簡單,可以參見本文中“表的hibernate配置文件”中的代碼字句“cascade=all”,加上它一切都OK了。
世界的一切對象皆隱藏于深深地迷霧之中,待撥開之后,才發現如此明朗和簡單,這需要興趣和勇氣。
本文絕算不上是對技術高人的指導和開悟,而僅僅為自己的探索之路留下腳印,為初學之人點亮一束黑夜向前的火把,僅此而已亦足矣。
不足之處,歡迎探討!
-東營 sparta-紫杉 原創,轉載請注明出處 :)
http://www.tkk7.com/SpartaYew/
SpartaYew@163.com
QQ:22086526
posted on 2011-05-19 08:40 sparta-紫杉 閱讀(705) 評論(0) 編輯 收藏 所屬分類: SSH2