hibernate 一对一

本文介绍了一对一关系在数据库中的两种映射方式:共享主键和独立外键。通过具体的XML配置示例,展示了如何使用Hibernate进行双向一对一关联映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

双向一对一,有2种实现方式:


例如:人(Person)和护照(Passwort)的关系是一对一的的关系:
  1)共享主键的形式:
  1)主表映射文件的写法:
  <class name="Person" table="t_person">
  <id name="id" column="p_id">
  <generator class="increment"></generator>
  </id>
  <property name="name" column="p_name" type="string"></property>
<property name="birthday" column="p_birthday" type="date"></property>
<property name="email" column="email" type="string"></property>
<property name="phone" column="phone" type="string"></property>
<one-to-one name="passport" cascade="all"></one-to-one>
  </class>

  2)辅表映射文件的写法:
  <class name="Passport" table="t_passport">
  <id name="id" column="p_id">
  <generator class="foreign">
  <param name="property">person</param> //person为Passport中的关系属性
  </generator>
  </id>
  <property name="serial" column="p_serial" type="string"></property>
<property name="expiry" column="p_expiry" type="integer"></property>
<property name="date" column="p_date" type="date"></property>
<one-to-one name="person" constrained="true" cascade="all">
</one-to-one>
  </class>


2)独立外键的关联方式: 
  1)主表映射文件的写法: 
  <class name="Person" table="t_person"> 
  <id name="id" column="p_id"> 
  <generator class="increment"> </generator> 
  </id> 
  <property name="name" column="p_name" type="string"> </property> 
<property name="birthday" column="p_birthday" type="date"> </property> 
<property name="email" column="email" type="string"> </property> 
<property name="phone" column="phone" type="string"> </property> 
<one-to-one name="passport" class="Passport" property-ref="person" cascade="all"> </one-to-one> //person为 
  实体类Passwort中的关系属性。  person是Passport.java类中的一个对象;
  </class> 

  2)辅表映射文件的写法: 
  <class name="Passport" table="t_passport"> 
  <id name="id" column="p_id"> 
  <generator class="increment">  
  </generator> 
  </id> 
  <property name="serial" column="p_serial" type="string"> </property> 
<property name="expiry" column="p_expiry" type="integer"> </property> 
<property name="date" column="p_date" type="date"> </property> 
<many-to-one   name="person" class="Person" column="pss_id" unique="true">//pss_id为外键列 
</one-to-one> 
  </class> 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值