上次咱們在中Hibernate從入門到精通(十)多對多單向關聯映射講解了一下多對多單向關聯映射,此次咱們講解一下七種映射中的最後一種多對多雙向關聯映射。html
按照咱們以前的慣例,先看一下相關類圖和代碼,具體以下:java
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從入門到精通(十)多對多單向關聯映射中的多對多單向關聯映射,來具體分析一下多對多雙向關聯映射,重點體會二者的區別和聯繫。
this
分析咱們上述的類圖和代碼咱們能夠看出:單獨看多對多雙向關聯的一端,多對多雙向與多對多單向關聯沒有根本區別。只是在多對多的兩端各有一個集合(Set),它用來存儲與之相關的多個對象。(參考Hibernate從入門到精通(十)多對多單向關聯映射)
接下來咱們從存儲結構上看二者的區別,具體以下:
spa
從上圖能夠看出,多對多單向與雙向的存儲結構沒有任何區別。接下來咱們再來看一下配置信息。具體以下:
.net
<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的其餘內容,敬請期待!
hibernate