上次咱们在中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