`

Hibernate关联映射

阅读更多
Hibernate中有一对一,一对多,多对一,一对多(双向),多对多集中关联映射。

其中一对多,多对一,一对多(双向)用的比较多。因为一对一太过简单可不用,多对多可以转换为一对多或多对一。

一对一(单向的主键关联映射)
在实际生活中的例子有:身份证对应人
在主表的映射文件中不需配置特殊的标签,
在子表的映射文件就要将主键的生成策略设置为foreign并在其中设置参数(param),其参数的name为property,其参数的值为关联对象的标识(因为在类中关联对象的标识直接用关联对象,所以其值为关联对象的引用)。因为是关联着的所以还需加个标签one-to-one的标签,此标签的含义是表示怎么加载它的引用对象。

实例:(子表那端)


注意:若要配置双向的,在端的pojo类中加入子表端的pojo类的引用,并且在主表端的映射文件中加入one-to-one标签指向子表端。这样不管是查哪一端都可以加载另一端的数据。

还有个一对一唯一外键关联映射是多对一关联映射的特例。
单向:在多端采用many-to-one标签,指定unique=true,这样就限制了多的一端的多重性唯一。
双向:在单向的前提下,在另一端,添加<one-to-one name=”对象引用名” property-ref=”外键端所需比较的属性名”/>,外键关联映射中,两个实体采用的是person的外键维护的关系,所以不能指定主键加载类,而需根据别的属性来加载,在property-ref中的值应是那个属性名。

多对一
只需在多端中的配置文件中配置<many-to-one>这个节点即可。
例:

在java代码中多端中设置一端所代表的对象即可。
例: (一端)
注意:在一端不需设置任何代码


多对多
需在两端的配置文件中都设置成set节点:
例:

注意:需设置 cascade="save-update" ,应为若cascade为all那么删除一方的某条数据,会将关联的所有数据全部删除
在java代码中两端设置另一端类型为Set即可。
例:


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics