平時工作中雖然也經常提到多對多的對映,但是在實際操作中運用到還是第一次.
組group和角色role,多對多的對映.
role的對映檔案
[code]
start with 1000
[/code]
group的對映檔案:
[code]
start with 1000
[/code]
頁面支援雙向操作,即可在角色中新增刪除組,也可在組中新增刪除角色.
在組中新增角色:
[code]
public void addgrouproles(long groupid, listroleids)
group.getroles().addall(roles);
this.commondao.store(group);
}[/code]
組內刪除角色:
[code]
public void removegrouproles(long groupid, listroleids)
group.getroles().removeall(roles);
this.commondao.store(group);
}[/code]
執行以上操作後,程式在移除組的角色的時候,同時將角色以及組本身都刪除掉了.
如果將對映檔案改為:
[code]
以及[/code]
以上配置下,可以正常進行相關的新增刪除操作.直接將cascade="delete"去掉,同樣可以正常操作.
覺得很納悶,程式中只是將角色從組中移除,而不是刪除角色這個物件.操作過程中應該是將中間表group_role中的記錄刪除,但是最後卻連帶把group和role的記錄也刪除了.
和同事討論這種現象,同事分析說hibernate在all-delete-orphan情況下,在刪除中間表的時候,會判斷相關聯的物件是否是"孤兒",如果是"孤兒"也會將相關的物件同時刪除.
hibernate高階 多對多對映
前面學習了一對多對映,對hibernate的配置有一定大了解,在實際開發中還有一種對映關係就是多對多對映,比如乙個公司中開發人員和專案之間就是多對多的關係,乙個開發人員可以同時參與幾個專案,當然乙個專案可以有多個人員參與。首先就是在資料庫中建立三張表,除了本來的雇員表和專案表外,另外一張表來儲存兩者...
Hibernate中使用註解對映多對多
在hibernate中,通常配置物件關係對映關係有兩種,一種是基於xml的方式,另一種是基於annotation的註解方式表 create table t rights id number 5 name varchar2 50 constraint t rights name uk unique c...
Hibernate對映多對多雙向關聯關係(小案例)
多對多雙向關聯關係 project 工程 emp 員工 為案例 步驟如下 1 建立project類,並需要定義集合型別的emp屬性 public class project public void setpid integer pid public string getpname public vo...