【SSH 基础】浅谈Hibernate关系映射(4)
2014-08-05 09:01
405 查看
继上篇博客
多对多关联映射(单向)
多对多对象关系映射,需要加入一张新表完成基本映射。
Hibernate会自动生成中间表
Hibernate使用many-to-many标签来表示多对多的关联,多对多的关联映射,在实体类中,跟一对多一样,也是用集合来表示的。
如下图所示
通过User可以查看Role的信息
User的映射文件
Role的映射文件
多对多关联映射(双向)
双向多对多对象关系映射,是两端都能将对方加载上来,双向都需要加上标签映射。
要注意:
*生成中间表名必须一样
*生成中间表字段必须一样
User的映射文件:
Role的映射文件
区别:单向多对多和双向多对多存储结构没有任何的区别,但他们的映射文件是有区别的,加载过程是不同的。
关系映射总结
综上所述,可以看出,同一类映射,无论是单向还是双向,他们的存储结构是相同的,之所以映射文件不同,是因为加载时不同(在增删改时)即要通过谁能看到谁,还是互相都能看到。
无论是一对多,多对多,还是一对一等关系,例如:Student---》IdCard,学生想知道卡信息,那么Student端就会有IdCard的引用,反过来也就是双向的关系的话,通过IdCard想要知道Student的信息,那么IdCard端就要要Student的引用(实体关系上的体现)!
多对多关联映射(单向)
多对多对象关系映射,需要加入一张新表完成基本映射。
Hibernate会自动生成中间表
Hibernate使用many-to-many标签来表示多对多的关联,多对多的关联映射,在实体类中,跟一对多一样,也是用集合来表示的。
如下图所示
通过User可以查看Role的信息
User的映射文件
<hibernate-mapping> <class name="com.bjpowernode.hibernate.User"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> <set name="roles" table="t_user_role"> <key column="user_id"></key> <many-to-many class="com.bjpowernode.hibernate.Role" column="role_id"></many-to-many> </set> </class> </hibernate-mapping>
Role的映射文件
<hibernate-mapping> <class name="com.bjpowernode.hibernate.Role"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> </class> </hibernate-mapping>
多对多关联映射(双向)
双向多对多对象关系映射,是两端都能将对方加载上来,双向都需要加上标签映射。
要注意:
*生成中间表名必须一样
*生成中间表字段必须一样
User的映射文件:
<hibernate-mapping> <class name="com.bjpowernode.hibernate.User"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> <set name="roles" table="t_user_role"> <key column="user_id"></key> <many-to-many class="com.bjpowernode.hibernate.Role" column="role_id"></many-to-many> </set> </class> </hibernate-mapping>
Role的映射文件
<hibernate-mapping> <class name="com.bjpowernode.hibernate.Role"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> <set name="users" table="t_user_role"> <key column="role_id"></key> <many-to-many class="com.bjpowernode.hibernate.User"></many-to-many> </set> </class> </hibernate-mapping>
区别:单向多对多和双向多对多存储结构没有任何的区别,但他们的映射文件是有区别的,加载过程是不同的。
关系映射总结
综上所述,可以看出,同一类映射,无论是单向还是双向,他们的存储结构是相同的,之所以映射文件不同,是因为加载时不同(在增删改时)即要通过谁能看到谁,还是互相都能看到。
无论是一对多,多对多,还是一对一等关系,例如:Student---》IdCard,学生想知道卡信息,那么Student端就会有IdCard的引用,反过来也就是双向的关系的话,通过IdCard想要知道Student的信息,那么IdCard端就要要Student的引用(实体关系上的体现)!
相关文章推荐
- 【SSH 基础】浅谈Hibernate关系映射(2)
- 【SSH 基础】浅谈Hibernate关系映射(3)
- 【SSH 基础】浅谈Hibernate关系映射(3)
- 【SSH 基础】浅谈Hibernate关系映射(4)
- 【SSH 基础】浅谈Hibernate关系映射(1)
- 【SSH 基础】浅谈Hibernate映射
- 【SSH 基础】浅谈Hibernate映射
- 【SSH 基础】Hibernate继承关系映射
- Hibernate关系映射基础
- Hibernate之 对象/关系数据库映射基础(Basic O/R Mapping)
- SSH——Hibernate继承关系映射详解(配置+实例+总结)
- SSH:Hibernate框架(Hibernate集合Map关系映射)
- 【SSH三大框架】Hibernate基础第十一篇:对继承映射的操作
- ssh学习:hibernate关系映射(5)
- ssh学习:hibernate关系映射(4)
- 【SSH三大框架】Hibernate基础第六篇:多对一关联关系的映射、分析及加入、查询
- 【转】Hibernate之 对象/关系数据库映射基础(Basic O/R Mapping)
- SSH:Hibernate框架(关系映射及基本配置)
- Hibernate之 对象/关系数据库映射基础(Basic O/R Mapping)
- SSH深度历险(一)深入浅出Hibernate架构(一)-------映射解析——七种映射关系