通常在数据库或者现实的实体关系中存在3种现象: 1-1 ,1-N , N-N 其中1对1的关系 好比一个丈夫 只有一个 妻子
,一个妻子也只有一个老婆,一对多的关系 就像 1个人能有多个 房子,而一个房子只能有一个房主, 多对多
好比一个班有多个老师来教,而一个老师能教多个班。
在实体设计中 也存在这样映射关系,一对一 用的比较少,一对多或者 多对多 用的比较常见。
先来介绍下一对一 ;
每种映射关系都存在 有连接表和无连接表 两种情况,下面我都讲解 无连接表的情况。
第一种情况; 基于外键的双向 关联
什么意思呢; 基于外键的关联好比 一个表的外键是另一个表的主键,学过数据库的朋友应该都知道这种主从表关系(父子表关系)。
数据的表设计就不多做解释了,下面着重讲解 映射文件的写法;
在hibernate框架中的我们都知道 一个表应该对应一个实体 即模型(bean) 所有主从表的话基本要设计两个bean对象,那么每个bean对象就必须写上一个xml问价作为hibernate框架 控制的桥梁。
在主表对应的bean对象的 xml文件的写法如下;
<hibernate-mapping package="lee‘>
<class name="对应bean对象的全路径" table=“对应的表名">
<id name="id的名字" column="表中的字段名" > <!-- 如果 两个的名字一样的则column可以不写-->
<ganerator class="native” /> 主键生成策略</id>
<property name="其他的属性名">
........
<!-- 关键代码-->
主bean 类的写法加上一个属性 表示 另一个 bean的 变量,在子bean中同样如此
<one-to-one name="对应子表中的对象的变量名"
" class="另一个bean对象的全路径" cascade="all" property-ref="在另一个bean中代表本类的变量名"></one-to-one> cascade="all"表示 同步两个表
</class>
</ hibernate-mapping>
另一个bean ,即子表bean的xml文件的写法
<前面和主bean一样>
主键生成策略:foreign
<many-to-one name="对应主bean对象的变量名" unique=“true”表示唯一外键
column=“外键名”
class="主bean的全路径"></many-to-one>
2:基于主键的双向 1-1关联
什么是基于主键 ; 即一个表的主键是另一个的主键,一个的主键变化 另一个表也同时变化
xml写法
<one-to-one name="另一个bean的变量名" class=“另一个bean的全路径” cascade="all">