上次我們在中Hibernate從入門到精通(十)多對多單向關聯映射講解了一下多對多單向關聯映射,這次我 們講解一下七種映射中的最後一種多對多雙向關聯映射。
多對多雙向關聯映射
按照我們之前的慣例,先看一下相關類圖和代碼,具體如下:
public class Role { private int id; private String name; private Set users; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set getUsers() { return users; } public void setUsers(Set users) { this.users = users; } } public class User { private int id; private String name; private Set roles; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set getRoles() { return roles; } public void setRoles(Set roles) { this.roles = roles; } }
接下來我們對比之前的博文Hibernate從入門到精通(十)多對多單向關聯映射中的多對多單向關 聯映射,來具體分析一下多對多雙向關聯映射,重點體會兩者的區別和聯系。
多對多雙向與多對多單 向關聯映射的異同
分析我們上述的類圖和代碼我們可以看出:單獨看多對多雙向關聯的一端,多對多 雙向與多對多單向關聯沒有根本區別。只是在多對多的兩端各有一個集合(Set),它用來存儲與之相關的多個對 象。(參考Hibernate從入門到精通(十)多對多單向關聯映射)
接下來我們從存儲結構上看兩者的區別,具 體如下:
從上圖可以看出 ,多對多單向與雙向的存儲結構沒有任何區別。接下來我們再來看一下配置信息。具體如下:
<class name="com.zs.hibernate.Role" table="t_role"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <set name="users" table="t_user_role"> <key column="role_id" not-null="true"/> <many-to-many class="com.zs.hibernate.User" column="user_id"/> </set> </class> <class name="com.zs.hibernate.User" table="t_user"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <set name="roles" table="t_user_role"> <key column="user_id" not-null="true"/> <many-to-many class="com.zs.hibernate.Role" column="role_id" /> </set> </class>
對比我們之前的博文Hibernate從入門到精通(十)多對多單向關聯映射中的多對 多單向映射的配置信息,我們可以看出在單向映射中,只能A->B,不能B->A,所以A與B的關系是不等的 。而在雙向關聯映射中,既能A->B,也能B->A,所以A與B的關系是等價的。這樣也就造成了在雙向關聯 映射的配置文件的兩個類的配置信息基本相同,即A=B。
到此為止我們關於關聯映射的所有內容就基本講完 了,接下來我們會繼續講解一下Hibernate的其他內容,敬請期待!