Hibernate之一对一关联映射
2013-10-30 15:47
183 查看
Hibernate中一对一关联映射共分为两种,一种是一对一主键关联映射,另一种是一对一唯一外键关联映射。下面简单介绍一下这两种关联映射。
映射文件IdCard.hbm.xml
映射文件Person.hbm.xml
生成的SQL语句
表结构如下图:
注意:
保存关系维护端对象,与之对应的对象会同时保存。反之则不行。查询时也只能从关系维护端找到另一个对象,反之则找不到。
映射文件IdCard.hbm.xml
映射文件Person.hbm.xml
constrained="true表示,当前主键(person的主键)还是一个外键,参照了对端的主键(IdCard的主键),也就是会生成外键约束语句
生成的SQL语句
表结构如下图:
注意:
双向一对一关联映射的关键点就是one-to-one标签,是它告诉hibernate对象之间是如何关联的。与单向一对一主键关联映射相同的是保存关系维护端对象,与之对应的对象会同时保存。反之则不行。但是查询的时候,双方都能找到对方。
小结
从上面我们可以看到,单向一对一主键关联映射和双向一对一主键关联映射仅查一个one-to-one标签,但它们生成的sql语句却是完全相同的,也就是说one-to-one标签只影响查询,不影响存储。
映射文件IdCard.hbm.xml
映射文件Person.hbm.xml
使用<many-to-one>标签来映射,指定多的一端unique属性为true,这样就限定了多的一端的多重性为一,实现了一对一,其实它是多对一的特例。
映射文件IdCard.hbm.xml
映射文件Person.hbm.xml
一对一唯一外键关联映射生成的sql语句
表结构
注意:
单向一对一唯一外键关联映射和双向一对一唯一外键关联映射生成的sql语句完全相同,区别同上边的一样。
一对一主键关联映射
一对一主键关联映射的两个实体有相同的ID。这种映射又分为单向一对一关联主键映射和双向一对一主键关联映射。单向一对一主键关联映射
实例类图映射文件IdCard.hbm.xml
<hibernate-mapping> <class name="com.bjpowernode.hibernate.IdCard" table="t_idCard"> <id name="id"> <generator class="native"/> </id> <property name="cardNo"/> </class> </hibernate-mapping>
映射文件Person.hbm.xml
<hibernate-mapping> <class name="com.bjpowernode.hibernate.Person" table="t_person"> <id name="id"> <!-- 采用foreign生成策略,forgeign会取得关联对象的标识 --> <generator class="foreign"> <!-- property只关联对象 --> <param name="property">idCard</param> </generator> </id> <property name="name"/> <one-to-one name="idCard" constrained="true"/> </class> </hibernate-mapping>
生成的SQL语句
create table t_idCard (id integer not null auto_increment, cardNo varchar(255), primary key (id)) create table t_person (id integer not null, name varchar(255), primary key (id)) alter table t_person add index FK785BED803EEB3F3E (id), add constraint FK785BED803EEB3F3E foreign key (id) references t_idCard (id)
表结构如下图:
注意:
保存关系维护端对象,与之对应的对象会同时保存。反之则不行。查询时也只能从关系维护端找到另一个对象,反之则找不到。
双向一对一主键关联映射
实例类图:映射文件IdCard.hbm.xml
<hibernate-mapping> <class name="com.bjpowernode.hibernate.IdCard" table="t_idCard"> <id name="id"> <generator class="native"/> </id> <property name="cardNo"/> <one-to-one name="person"/> </class> </hibernate-mapping>
映射文件Person.hbm.xml
<hibernate-mapping> <class name="com.bjpowernode.hibernate.Person" table="t_person"> <id name="id"> <!-- 采用foreign生成策略,forgeign会取得关联对象的标识 --> <generator class="foreign"> <!-- property只关联对象 --> <param name="property">idCard</param> </generator> </id> <property name="name"/> <one-to-one name="idCard" constrained="true"/> </class> </hibernate-mapping>
constrained="true表示,当前主键(person的主键)还是一个外键,参照了对端的主键(IdCard的主键),也就是会生成外键约束语句
生成的SQL语句
create table t_idCard (id integer not null auto_increment, cardNo varchar(255), primary key (id)) create table t_person (id integer not null, name varchar(255), primary key (id)) alter table t_person add index FK785BED803EEB3F3E (id), add constraint FK785BED803EEB3F3E foreign key (id) references t_idCard (id)
表结构如下图:
注意:
双向一对一关联映射的关键点就是one-to-one标签,是它告诉hibernate对象之间是如何关联的。与单向一对一主键关联映射相同的是保存关系维护端对象,与之对应的对象会同时保存。反之则不行。但是查询的时候,双方都能找到对方。
小结
从上面我们可以看到,单向一对一主键关联映射和双向一对一主键关联映射仅查一个one-to-one标签,但它们生成的sql语句却是完全相同的,也就是说one-to-one标签只影响查询,不影响存储。
一对一唯一外键关联映射
单向一对一唯一外键关联映射
实例类图映射文件IdCard.hbm.xml
<hibernate-mapping> <class name="com.bjpowernode.hibernate.IdCard" table="t_idCard"> <id name="id"> <generator class="native"/> </id> <property name="cardNo"/> </class> </hibernate-mapping>
映射文件Person.hbm.xml
<hibernate-mapping> <class name="com.bjpowernode.hibernate.Person" table="t_person"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <many-to-one name="idCard" unique="true"/> </class> </hibernate-mapping>
使用<many-to-one>标签来映射,指定多的一端unique属性为true,这样就限定了多的一端的多重性为一,实现了一对一,其实它是多对一的特例。
双向一对一唯一外键关联
实例类图映射文件IdCard.hbm.xml
<hibernate-mapping> <class name="com.bjpowernode.hibernate.IdCard" table="t_idCard"> <id name="id"> <generator class="native"/> </id> <property name="cardNo"/> <one-to-one name="person" property-ref="idCard"/> </class> </hibernate-mapping>
映射文件Person.hbm.xml
<hibernate-mapping> <class name="com.bjpowernode.hibernate.Person" table="t_person"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <many-to-one name="idCard" unique="true"/> </class> </hibernate-mapping>
一对一唯一外键关联映射生成的sql语句
create table t_idCard (id integer not null auto_increment, cardNo varchar(255), primary key (id)) create table t_person (id integer not null auto_increment, name varchar(255), idCard integer unique, primary key (id)) alter table t_person add index FK785BED80F7C7B4CE (idCard), add constraint FK785BED80F7C7B4CE foreign key (idCard) references t_idCard (id)
表结构
注意:
单向一对一唯一外键关联映射和双向一对一唯一外键关联映射生成的sql语句完全相同,区别同上边的一样。
相关文章推荐
- Hibernate学习13 -- 关联映射3 -- 一对一关联2 -- 一对一唯一外键关联
- hibernate 一对一外键关联映射_单向
- Hibernate实体关系映射:单向主键一对一关联
- 【SSH之旅】一步步学习Hibernate框架(二):一对一关联映射中的主键关联
- 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)
- Hibernate之对象关系映射03一对一单向外键关联
- Hibernate中的一对一关联和组件的映射
- hibernate 关系映射之 单向外键关联一对一
- 【Hibernate步步为营】--双向关联一对一映射详解(二)
- 【Hibernate】--关联关系映射:一对一关联
- Hibernate一对一关联映射和一对多关联映射
- hibernate映射一对一关联 6
- hibernate一对一主键关联映射双向
- Hibernate关联关系映射之一对一(主键关联)
- hibernate一对一唯一外键关联单向映射
- hibernate之关于一对一单向,双向关联映射
- 【Hibernate步步为营】--双向关联一对一映射详解(二)
- 【Hibernate步步为营】--双向关联一对一映射详解(二)
- 【SSH进阶之路】Hibernate映射——一对一双向关联映射(六)
- 闲来无事,复习复习以前的东西---hibernate中的关联映射图解----一对一唯一外键