Hibernate的多对一和一对一映射
时间:2010-10-07 来源:lxy_em30
Hibernate多对一的实现(Student和Class(学生和班级为例)):
在多的一端使用<many-to-one>标签,这样会在多的一端加入一个外键,这个外键来自于一的一端。同时,这个外键的名称 是由<many-to-one>中的column属性来确定的,如果忽略column属性,在外键的名称默认和实体的属性名称一致。
配置实例:<many-to-one name="stuClass" column="class"/>
其中的stuClass为Student中的属性,class为数据库中外键的名称,如果column被忽略,在外键名称为stuClass。
Hibernate一对一的实现:(以Student和StudentCard(学生和图书卡为例))
1、一对一主键关联映射(单向):
让两个实体对象的id保持相同,这样可以避免多余的字段被创建。
具体的实现:
Student.hbm.xml中配置
<id name="id">
<!-- student的主键来源studentCard,也就是共享studentCard的主键 -->
<generator class="foreign">
<param name="property">stuCard</param>
</generator>
</id>
<one-to-one name="stuCard" constrained="true"/>
<one-to-one>标签的含义,指示hibernate怎么加载它的关联对象,默认根据主键加载, constrained="true",表明当前主键上存在一个约束,student的主键作为外键参照了stuCard。
StudentCard.hbm.xml中配置和普通的配置一样
2、一对一主键关联映射(双向):
具体实现:
Student.hbm.xml中配置不变;在StudentCard.hbm.xml中加入<one-to-one> 标签指向student即可
<one-to-one name="student">
3、一对一唯一外键关联映射(单向):
具体实现是和多对一的原理是一样的,只不过是在<many-to-one>的标签中多加入了一个属性:unique="true"
这就使多的一端的相应字段的任何值都只能为一中情况,从而实现一对一;
在Student.hbm.xml中其他的配置保持和普通的一样,另加入:<many-to-one name="stuCard" unique="true">
StudentCard.hbm.xml中配置和普通的配置一样;
4、一对一唯一外键关联映射(双向):
Student.hbm.xml中的配置不需要变化,只需要在StudentCard.hbm.xml中加入<one-to-one name="student" property-ref="stuCard">,其中stuCard是Student中的属性,其类型为:StudentCard。
以上是Hibernate中的多对一和一对一的配置,具体配置请下载附件。