Hibernate对象关系映射详解之“一对多”关系映射
之前学习Hibernate框架的时候,对这七大关系映射一直是云里雾里的,虽然可以仿照写出代码,但是不能独立编写出来。鉴于工作中这个知识点使用的几率还是非常大的,所以花了一点时间静下心来学习了一下,在这里写下一点学习笔记和大家交流。欢迎大家指点交流!(下面的笔记以及所有的示例都是使用注解)
我理解的关联映射就是将关联关系映射到数据库里,在对象模型中就是对一个或多个对象的引用。
七大关联映射有:单向一对一,单向一对多,单向多对一,单向多对多,双向一对一,双向一对多,双向多对多。
在学习关联映射之前,先理解何为“单向”?何为“双向”?
1、在使用注解实现关系映射时,只在其中一端进行配置则表示是单向关系映射,在两端同时进行配置则表示双向关系映射。
2、单向和双向的实质区别就是:哪一方负责维护该层关系。例如在单向关系中,配置的一端负责关系的维护,另外一端不负责;双向则是双方都要维护该层关系。加载负责维护关系的一端,系统会自动加载另一端。
举一个生活中的例子理解双向和单向:
情景假设:A 和 B 是两个人
(情景一)单向关系:
如果仅仅只是A喜欢B,则这层“喜欢”的关系就只是由A负责维护(或者说只能由A来维护),B不会进行维护。因为A对象中“喜欢”的属性中有B,所以在加载A这个人的数据时,同时会加载出B的相关数据;但是加载B的数据时,不会加载出A的相关数据,因为B的“喜欢”属性中没有A,甚至是没有“喜欢”这个属性。
(情景二)双向关系:
如果A 喜欢 B,同时B也喜欢A,则这层“喜欢”的关系就是由两个人同时维护(或者说可以由两个人维护)。同理于上,因为双方的“喜欢”属性中都有对方,所以在加载任意一个人的数据时,会加载出另外一个人的数据。
说明:主要还是看例子中对象所持有的属性对其的影响,不要把一对多和多对一的关系联系到“喜欢”上,重点在属性!!!哈哈
分割线==========================分割线==========================分割线
在这几种关联映射中,我觉得一对多这类关系映射最为复杂,所以在这里我先讲一对多这类(单向一对多,单向多对一,双向一对多)。有的人可能或疑惑,为什么没有双向多对一?其实在Hibernate中,一对多和多对一关系映射其实质是一样的,就是在“多“(一)的一端加对方的引用,指向“一”(多)的一端。不同的是,一对多是在“一”端加“多”端的集合,而多对一是在“多”端