hibernate多种映射关系
1.hibernate多对一映射
关联映射的本质:将关联关系映射到数据库,所谓的关联关系是对象模型在内存中的一个或多个引用
两种策略可以实现一对一的关联映射
*主键关联:既让两个对象具有相同的主键值,以表明他们之间一一对应的关系:数据库表不会有额外的字段来维护他们之间的关系,仅通过表的主键来关联
*唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制后,也可以用来表示一对一关联关系
<many-to-one>会在多的一端加入一个外键,这个外键是由<many-to-one>中的column属性定义的,如果忽略了这个属性,那么默外键跟实体的属性一致
<many-to-one>标签的定义示例:
*<many-to-one name="group" column="groupid">
注意model中是不用groupid而是用实体对象如下:
private Group group;——getter和setter方法
理解级联的含义:
*级联是对象的链锁操作(指save,或update,对于delete无效)
*级联对load不影响,也就是说级联对加载并不影响,只要配置了many-to-one就会加载相关
2.hibernate一对一主键关联映射(单向关联Person——》IdCard)
一对一主键关联映射:让两个实体对象的id保持相同,这样可以避免多余的字段
具体映射:
<id name="id">
<!--person的主键来源,也就是共享idCar的主键-->
<generator class="foreign">
<param name="property">idCard</param>
</generator>
</id>
<property name="name"/>
<!--one to noe 标签的含义,只是hibernate怎样加载它的关联对象,默认根据主键加载- constrained=”true“,表明当前主键上存在一个约束,person的主键作为外键参照了idCard ->
<one-to-one name="idCard" constrained="true"/>
注意两个model中都要有对象的引用
3.hibernate一对一主键关联映射(双向关联Person《——》IdCard)
在单向一对一主键关联的基础上还要在idCard的映射文件中加入<one-to-one>标签指向person,指示hibernate如何加载person,默认根据主键加载:
<one-to-one name="person">
4.hibernate一对一唯一外键关联映射(单向关联Person——》IdCard)
一对一主键关联映射:让两个实体对象的id保持相同,这样可以避免多余的字段
具体映射:
<id name="id">
<generator class="native”/>
</id>
<many-to-one name="idCard" unique="true"/><!--unique表示唯一性-->
注意两个model中都要有对象的引用
5.hibernate一对一唯一外键关联映射(双向关联person《———》IdCard)
在一对一唯一外键关联的基础上,在IdCard的映射文件中加入<one-to-one>指向person
如:
<one-to-one name="person" property-ref="idCard"/>