要实现Hibernate中一对一的数据关联关系有两种方式:
1, 主键关联,即两个表共享一个主键
2,唯一外键关联,即在一个表中记录一个外键字段,参照另一张表的主键
一、主键关联
1. 首先创建用户表(person) 和身份证表(idcard),二者是一对一的关系
----用户表----
create table Person(
id varchar2(32) primary key,
name varchar2(32) not null,
age number(3) not null
)
-----身份证表-----
create table idcard(
id varchar2(32) ,
serial VARCHAR(18) NOT NULL , //身份证号码
expiry number(3), //使用年限
foreign key(id) references person(id) on delete cascade
)
2,创建两个表对应的pojo
public class Person {
//主键
private String id = "";
//用户名
private String name = "";
//年龄
private int age = 0;
//身份证对象
private Idcard idcard = null;
..............
}
public class Idcard {
//主键
private String id = "";
//号码
private String serial = "";
//使用年限
private int expiry = 0;
//用户对象
private Person Person = null;
............
}
3,分别建立两张表的映射关系
Person.hbm.xml
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="包名">
<class name="Person" table="Person">
<id name="id" column="id" type="string">
<generator class="uuid.hex"></generator>
</id>
<property name="name" column="name" type="string"/>
<property name="age" column="age" type="int"/>
<one-to-one name="idcard" class="包名.Idcard" cascade="all" outer-join="true"/>
</class>
</hibernate-mapping>
Idcard.hbm.xml
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="包名">
<class name="Idcard" table="Idcard">
<id name="id" column="id">
<generator class="foreign">
<param name="property">person</param>
</generator>
</id>
<property name="serial" column="serial" type="string"/>
<property name="expiry" column="expiry" type="int"/>
<one-to-one name="person" class="Person" constrained="true"/>
</class>
</hibernate-mapping>
二、唯一外键关联
1. 首先创建用户表(person) 和身份证表(idcard),二者是一对一的关系
----用户表----
create table person(
pid varchar2(32) primary key,
name varchar2(32) not null,
age number(3) not null
)
----身份证表----
create table idcard(
id varchar2(32) ,
serial VARCHAR(18) NOT NULL ,
expiry number(3),
pid varchar2(32) ,
foreign key(id) references person(pid) on delete cascade
)
2.创建两张表对应的pojo
public class Person {
//主键
private String pid = "";
//用户名
private String name = "";
//年龄
private int age = 0;
//身份证对象
private Idcard idcard = null;
..............
}
public class Idcard {
//主键
private String id = "";
//号码
private String serial = "";
//使用年限
private int expiry = 0;
//用户对象
private Person person = null;
............
}
3.分别建立两张表的映射关系
Person.hbm.xml
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="包名">
<class name="person" table="person">
<id name="pid" column="pid" type="string">
<generator class="uuid.hex"/>
</id>
<property name="name" column="name" type="string"/>
<property name="age" column="age" type="int"/>
<one-to-one name="idcard" class="Idcard" property-ref="person"/>
</class>
</hibernate-mapping>
Idcard.hbm.xml
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="包名">
<class name="Idcard" table="idcard">
<id name="id" column="id" type="string">
<generator class="uuid.hex"/>
</id>
<property name="serial" column="serial" type="string"/>
<property name="expiry" column="expiry" type="int"/>
<many-to-one name="person" class="Person" column="pid"/>
</class>
</hibernate-mapping>
分享到:
相关推荐
由此可知,客户数据和订单数据是一对多的关系;那这样的话,问题就来了,我到底以订单中的哪一条数据为准呢?经过协商后一致同意以最新的一条数据为准; 数据测试初始化SQL脚本 DROP TABLE IF EXIST
父表中的外键,是子表中的主键。在父表中的外键,可以出现多次。主键是不能有重复的。
1、在有外键的一方,可以维护关联关系,可以建立关联关系,同样也可以解除关联关系,可以任意删除本对象,如果在hbm.xml中设置了cascade="delete",也可以删除关联对象 2、在没有外键的一方,不可以维护关联关系,...
基于粗糙集理论的数据挖掘中关联规则的研究与应用
能实现一对多关联的通用EXCEL导入功能 具体访问我的BLOG http://blog.csdn.net/dreamdiary
从UCI数据网站中选择成人数据库(adult),数据是从美国人口普查局数据库中提取的。这里选取一年的收入大于50k的成人数据,选取8个...可以运用关联分析找出8个属性变量中,哪些变量有关系,从而提取出一些有用信息。
8.1 理解关联规则分析 下面通过餐饮企业中的一个实际情景引出关联规则的概念...关联规则分析是数据挖掘中最活跃的研究方法之一,目的是在一个数据集中找出各项之间的关联关系,而这种关系并没有在数据中直接表示出来。
有关hibernate中保存多对一关联关系的进一步分析,很详细的介绍了多对一关系
了解数据表之间以及对象之间的三种关联关系 2.熟悉关联关系中的嵌套查询和 嵌套结果 3.掌握一对一,一对多,和多对多关联映射作用
check_mark: 13+ :heavy_check_mark: 8+ :heavy_check_mark:什么和为什么Xoces是一个JavaScript小部件,用于可视化具有层次结构级别和“同一级别内”关系的数据。 例如,您将学习成果分组为主题,并且希望可视化您的...
SQL实现两张无关联表的数据列合并在一张结果集中实现思路。
目前数据关系的研究主要集中在基于数据自身属性方面,基于此建立的数据关联关系没有考虑到用户对其产生的作用,所以在对数据管理、组织以及应用数据服务的过程中很难体现出用户的意愿.为此,提出一种基于用户行为的数据...
灰色关联分析(Grey Relational Analysis,GRA)是一种多变量分析方法,用于研究各个变量之间的关联性。它是由中国科学家陈景润于1980年提出的,广泛用于探究变量之间的关系,尤其在灰色系统理论的框架下应用广泛。 ...
一对多关系应该是开发人员接触得最多的关联关系。打个比方,淘宝上,一个用户他拥有多个订单,而这几个订单单独属于此用户,这个关联关系就叫一对多关系。在数据库中则表示为两张表互相关联,如用户表(A表)关联...
hibernate 关系类型 一对多 多对一各种关系都有 还有就是级联 欢迎
url varchar 50 网址 buildDate datetime 8 建馆日期 introduce text 16 图书馆介绍 15.2.2 数据表关联关系分析 下面是图书馆管理系统中数据表的关联关系。 1.operator_t 表关联关系 当读者进行注册时(即添加读者...
索引:快速访问数据库表的特定信息,索引是对数据库表一列和多列的值进行排序的一种数据结构。 DDL:数据定义语言:定义数据库对象:创建库,表,列等。 DML:数据操作语言:用来操作数据库表中的记录。 DQL:...
这是以前我做过的一个题,《大型超市购物栏分析》,详细的题目、数据、MATLAB源程序、以及Apriori算法的简介和流程 都在压缩包里面,在这里我就不再赘述了。 Apriori算法进行购物篮关联分析.rar
包含状态估计和数据关联两部分。其中,状态估计是指对环境特征的位置 以及机器人定位的估计过程;数据关联是指建立在不同时间、不同地点获得的传 感器测量之间、传感器测量与地图特征之间或者地图特征与地图特征之间...