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




























二、dao-持久層代碼





























































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



































值得一提的是,在記錄下本文之前,在刪除某個(gè)角色的過程中Weblogic的后臺(tái)出現(xiàn)了“Could not execute JDBC batch update”的錯(cuò)誤,這個(gè)錯(cuò)誤的解決耗費(fèi)了不少時(shí)間,隨著問題的明朗化,不斷地加深對(duì)hibernate的認(rèn)識(shí)。這個(gè)錯(cuò)誤的原因就是因?yàn)闆]有為角色表的hibernate配置文件設(shè)置級(jí)聯(lián)關(guān)系,從而在刪除角色時(shí),因?yàn)樵谟脩艚巧砗徒巧珯?quán)限表中已經(jīng)有與該角色相關(guān)的記錄,因此Oracle會(huì)報(bào)出“ORA-02292:違反完整約束條件”的錯(cuò)誤,使整個(gè)刪除動(dòng)作失敗。
解決的方法很簡(jiǎn)單,可以參見本文中“表的hibernate配置文件”中的代碼字句“cascade=all”,加上它一切都OK了。
世界的一切對(duì)象皆隱藏于深深地迷霧之中,待撥開之后,才發(fā)現(xiàn)如此明朗和簡(jiǎn)單,這需要興趣和勇氣。
本文絕算不上是對(duì)技術(shù)高人的指導(dǎo)和開悟,而僅僅為自己的探索之路留下腳印,為初學(xué)之人點(diǎn)亮一束黑夜向前的火把,僅此而已亦足矣。
不足之處,歡迎探討!
-東營(yíng) sparta-紫杉 原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處 :)
http://www.aygfsteel.com/SpartaYew/
SpartaYew@163.com
QQ:22086526
posted on 2011-05-19 08:40 sparta-紫杉 閱讀(712) 評(píng)論(0) 編輯 收藏 所屬分類: SSH2