上次我們在中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的其他內容,敬請期待!