Hibernate 一对一关联映射(主键关联VS唯一外键关联)
来源:互联网 发布:linux vi 怎么打开序号 编辑:程序博客网 时间:2024/05/21 12:41
一对一关联映射有两种:一种是主键关联,一种是“唯一”外键关联。
主键关联:原理是两张表的主键(ID)保持一致,在获取的时候根据两种表中的ID相同来作为关系判断的标准,这样的设计好处在于我们不用添加另外的字段来维护它们之间的关系。
废话少说,看例子。
在生活一对一的关系还“算”挺多的,比如人与自己的省份证,丈夫和妻子(当然是在符合中国国情的情况下)等等。
第一步:建立两张表。
TABLE:wife
注意:这两张表没有使用外键来关联它们。
第二步:建立PO对象。
JAVA PO :HusbandPO.java
JAVA PO :WifePO.java
第三步:在XX.hbm.xml中配置PO对象属性与数据库表字段的映射。
HusbandPO.hbm.xml
WifePO.hbm.xml
唯一外键映射:记住是“唯一”,因为一对一是多对一的一种特例,且在hibernate-mapping中是利用<many-to-one>来表示,这个时候需要指明该标签的unique="true",这才算是一对一,否则就是多对一。
例子还是使用上面的一一制夫妻关系。
第一步:只需要在两张表的其中一张中加上一个外键,我这里在wife身上加(没有别的意思 )。
TABLE:husband
第二步:上面是写PO ,这里也不例外,不过PO对象没有改变过哈,这里不复写了。
第三步:XX.hbm,xml配置,配置与上面有所区别,注意啦……
HusbandPO.hbm.xml
WifePO.hbm.xml
转自:点击打开链接
主键关联:原理是两张表的主键(ID)保持一致,在获取的时候根据两种表中的ID相同来作为关系判断的标准,这样的设计好处在于我们不用添加另外的字段来维护它们之间的关系。
废话少说,看例子。
在生活一对一的关系还“算”挺多的,比如人与自己的省份证,丈夫和妻子(当然是在符合中国国情的情况下)等等。
第一步:建立两张表。
TABLE:husband
create table husband(h_id int primary key,h_name varchar(20));
TABLE:wife
create table wife(w_id int primary key,w_name varchar(20));
注意:这两张表没有使用外键来关联它们。
第二步:建立PO对象。
JAVA PO :HusbandPO.java
package com.lovo.po;public class HusbandPO { private int id; private String name; private WifePO myWife; //注意包含了一个妻子对象 ... other getXX setXX ...}
JAVA PO :WifePO.java
package com.lovo.po;public class WifePO { private int id; private String name; private HusbandPO myHus; //注意包含了一个丈夫对象 ... other getXX setXX ...}
第三步:在XX.hbm.xml中配置PO对象属性与数据库表字段的映射。
HusbandPO.hbm.xml
<hibernate-mapping><!-- 主控方 --><class name="com.lovo.po.HusbandPO" table="husband"><id name="id" column="h_id" type="int"><generator class="increment"></generator></id><property name="name" column="h_name" type="string"></property><!-- cascade的作用是当本身发生修改的时候,会级联的修改从表 --><one-to-one name="myWife" class="com.lovo.po.WifePO" cascade="all"></one-to-one></class></hibernate-mapping>
WifePO.hbm.xml
<hibernate-mapping><class name="com.lovo.po.WifePO" table="wife" ><id name="id" column="w_id" type="int"><generator class="foreign"><!-- 引用husband表的主键 --><param name="property">myHus</param></generator></id><property name="name" column="w_name" type="string"></property><one-to-one name="myHus" class="com.lovo.po.HusbandPO" cascade="all"></one-to-one> </class></hibernate-mapping>
唯一外键映射:记住是“唯一”,因为一对一是多对一的一种特例,且在hibernate-mapping中是利用<many-to-one>来表示,这个时候需要指明该标签的unique="true",这才算是一对一,否则就是多对一。
例子还是使用上面的一一制夫妻关系。
第一步:只需要在两张表的其中一张中加上一个外键,我这里在wife身上加(没有别的意思 )。
TABLE:husband
create table husband(h_id int primary key,h_name varchar(20));
create table wife(w_id int primary key,w_name varchar(20),fk_hus_id int foreign key(fk_hus_id) references husband(h_id));
第二步:上面是写PO ,这里也不例外,不过PO对象没有改变过哈,这里不复写了。
第三步:XX.hbm,xml配置,配置与上面有所区别,注意啦……
HusbandPO.hbm.xml
<hibernate-mapping> <class name="com.lovo.po.HusbandPO" table="husband"><id name="id" column="h_id" type="int"><generator class="increment"></generator></id><property name="name" column="h_name" type="string"></property> <one-to-one name="myWife" class="com.lovo.po.WifePO"property-ref="myHus" cascade="all"></one-to-one><!-- property-ref 被关联到此外键的类中的对应属性的名字,若没指定,使用被关联类的主键.由于这里是唯一外键关联,所以一般要设置这里。(这里相当于是在说我妻子的老公是我,从而我妻子的结婚证编号和我的结婚证编号是一样的) --></class></hibernate-mapping>
WifePO.hbm.xml
<hibernate-mapping><class name="com.lovo.po.WifePO" table="wife" ><id name="id" column="w_id" type="int"><!-- 注意!这里的ID不在是引用husband表的ID了 --><generator class="increment"></generator></id><property name="name" column="w_name" type="string"></property><many-to-one name="myHus" class="com.lovo.po.HusbandPO" cascade="all"unique="true" column="fk_hus_id"></many-to-one> <!-- 这里是要表示一对一所以“unique="true"”是不可缺少的。column指明数据库表的外键字段 --></class></hibernate-mapping>
转自:点击打开链接
0 0
- Hibernate 一对一关联映射(主键关联VS唯一外键关联)
- Hibernate 一对一关联映射(主键关联VS唯一外键关联)
- 新手上路之Hibernate(四):单向一对一关联映射(主键、唯一外键关联)
- hibernate映射一对一关联(主键关联)
- 【Hibernate】一对一唯一外键关联映射
- hibernate一对一唯一外键关联映射(双向关联PersonIdCard)
- hibernate一对一主键唯一外键关联(一)
- hibernate一对一主键唯一外键关联(二)
- Hibernate学习13 -- 关联映射3 -- 一对一关联2 -- 一对一唯一外键关联
- Hibernate关联映射1:一对一主键关联
- Hibernate一对一主键关联映射
- hibernate一对一主键关联映射
- hibernate一对一主键关联映射
- 【Hibernate】一对一主键关联映射
- Hibernate一对一关联(唯一外键)
- Hibernate映射详解--一对一唯一外键关联映射
- hibernate一对一唯一外键关联单向映射
- Hibernate中 一对一 唯一外键关联映射
- 全局钩子使用碰到的问题
- DSP CMD学习笔记(连接物理存储和逻辑存储)
- storm项目实战开发 Storm视频教程下载
- 匆忙推出的Mobileme没有得到广泛的认可,用户认为它速度缓慢、价格昂贵还总是出错
- 程序员需要有多懒 ?- cocos2d-x 数学函数、常用宏粗整理 - by Glede
- Hibernate 一对一关联映射(主键关联VS唯一外键关联)
- VC6.0创建与调用dll
- HIVE元数据表/数据字典
- mysql官方关于2013和2006错误代码产生原因和解决方案
- Android 源码的下载和编译环境的安装及编译
- CentOS6.3 安装 MySQL5.6 提示冲突问题解决方法
- 网页定时采集图像
- xml文件读取工具类
- 苹果最早意识到,你的计算机可以成为数字化中心……但是再过几年,这个数字化中心会从你的计算机转移到云中