hibernate中一对一(1:1)是多对一(N:1)的特例,
若需要用一对一的关系时,A和B表使用相同主键使用one-to-one,若是A主键是B表外键使用manty-to-one
(1).采用one-to-one,默认cascade="all"级联关系, 设置property-ref=""对应字段,constrained="true"表示约束即B表的主键作为外键参照A表主键
(2).采用many-to-one,并且设置 unique="true",表示数据也必须是唯一的,默认cascade="none";
只需要在其中一个类及文件中加入此配置。
IdCard表 配置文件(IdCard.hbm.xml)如下(表示用户与身份号码一一对应关系):
1 <class name="IdCard" table="IdCard" dynamic-update="true">
2
3 <id name="id" column="card_id">
4 <generator class="sequence">
5 <param name="sequence">idcard_card_id_seq</param>
6 </generator>
7 </id>
8
9 <property name="card_number" type="string" column="card_number"/>
10 <!-- one-to-one 默认cascade="all" 主从表使用相同主键使用
11 <one-to-one name="userinfo" class="UserInfo" property-ref="id" cascade="all" constrained="true">
12 </one-to-one>
13 -->
14 <!-- 一对一可以使用many-to-one 设置unique="true" 关联外键,默认cascade="none",作为外键依赖使用 -->
15 <many-to-one name="userinfo" class="UserInfo" column="id" unique="true" />
16 </class>
备注:cascade级联,即关联对象是否执行同一操作,值有:all、none、save-update、delete、all-delete-orphan
(1).cascade="all",关联对象执行save-update和delete操作,都对关联对象执行同步操作
(2).cascade="none",关联对象不执行关联操作
(3).cascade="save-update",关联对象执行save/update/saveOrUpdate时进行关联操作
(4).cascade="delete",关联对象执行delete时进行关联操作
(5).cascade="all-delete-orphan",所有操作都传递到相关联的对象 并删除不再与主对象关联的对象