上一篇文章Hibernate从入门到精通(九)一对多双向关联映射中咱们讲解了一下关于一对多关联映射的相关内容,此次咱们继续多对多单向关联映射。html
在讲解多对多单向关联映射以前,首先看一下相关类图和代码,具体以下:
java
public class Role { private int id; private String name; 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 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
接下来咱们再从存储结构上分析二者的区别和联系。具体以下:spa
经过上述表结构明显能够看出,在多对多关联映射中,存在第三张表,用以维护关联关系两端对象的对应关系,而这在一对多中则是不存在的。为何会这样呢?这是由于配置文件的配置不一样所致使的这样的映射结果。具体以下:.net
<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"/> <many-to-many class="com.zs.hibernate.Role" column="role_id" /> </set> </class> <class name="com.zs.hibernate.Role" table="t_role"> <id name="id"> <generator class="native"/> </id> <property name="name"/> </class>
经过对比上篇文章Hibernate从入门到精通(八)一对多单向关联映射中映射文件能够看出在一对多单向关联中映射配置的属性为<one-to-many/>,而多对多关联映射中配置的属性为<many-to-many/>,这就致使了映射的两种不一样结果和两种不一样的解决方案。
到此为止关于一对多单向关联映射咱们就基本讲完了,下次咱们继续讲解关联映射的最后一个内容多对多双向关联映射。hibernate