Hibernate(十)多对多单向关联映射
上一篇文章Hibernate从入门到精通(九)一对多双向关联映射中我们讲解了一下关于一对多关联映射的 相关内容,这次我们继续多对多单向关联映射。
多对多单向关联映射
在讲解多对多单向关联映 射之前,首先看一下相关类图和代码,具体如下:
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从入门到精通(八)一对多单向关联映射)
接下来我们再从存储结构上分析两者的区别和联 系。具体如下:
通过上述表结构 明显可以看出,在多对多关联映射中,存在第三张表,用以维护关联关系两端对象的对应关系,而这在一对多 中则是不存在的。为什么会这样呢?这是因为配置文件的配置不同所导致的这样的映射结果。具体如下:
<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/>,这就导致了映射的两种不同结果和两种不同的解决方案。
到此为止关于一对多单 向关联映射我们就基本讲完了,下次我们继续讲解关联映射的最后一个内容多对多双向关联映射。