hibernate 学习三——一对一关系(OneToOne)

 hibernate一对一的关系包括

单向基于外键一对一,基于主键的一对一

1.主键关联 
让两个对象具有相同的主键值,以表明他们之间一一对应的关系,数据库表不会有额外的字段来维护他们之间的关系,仅仅通过两张表的相同主键来关联。 

2.唯一外键关联:和多对一配置一样,只不过用了唯一的限制。 

 

一、单向 唯一外键关联

<class name="com.softeem.pojo.Student" table="tb_student">
<id name="stuId">
    <generator class="native">
    </generator>
</id>
<property name="stuName" not-null="true">
</property>
<many-to-one name="cardId" unique="true" cascade="all">
</many-to-one>	
</class>

二、双向 唯一外键关联

<class name="Student" table="tb_student">

      <id name="stuId">

         <generator class="native"></generator>

      </id>

      <property name="stuName"></property>

      <many-to-one name="cardId" unique="true" cascade="all"></many-to-one>

   </class>

<class name="Card" table="tb_card">

      <id name="cardId">

         <generator class="native"></generator>

      </id>

      <property name="cardCode"></property>
      <!--对方表产生依赖于cardId的外键--> 
      <one-to-one name="student" property-ref="cardId"></one-to-one>

   </class>

三、单向 主键关联

        基于主键关联的持久化类不能拥有自己的主键生成器策略,它的主键有关联实体来负责生成

        采用基于主键的1 - 1关联时,使用<one-to-one.../>元素来影射关联实体,配置<one-to-one.../>元素时,需指定一个name属性,其值为关联实体属性的属性名。

<class name="Student" table="tb_student">
  <id name="stuId">
    <generator class="foreign"><!-- 基于主键关联时,主键生成的策略是foreign,表明根据关联类的主键来生成该实体的主键 -->
	<param name="property">card</param>
    </generator>
  </id>
<property name="stuName"></property>
<!-- 自己的表中产生外键,其值为本类中card属性,和基于外键的一对一相反 -->
<one-to-one name="card" constrained="true">
</one-to-one>
</class>

<class name="com.softeem.pojo.Card" table="tb_card">
  <id name="cardId">    
    <generator class="native">
    </generator>  
  </id>      
  <property name="cardCode"></property>
</class>

 

public class Card {    
   private int cardId;    
   private String cardCode;    
   ...    
   get,set方法    
   ...    
}    
public class Student {    
   private int stuId;    
   private String stuName;    
   //只做为stuId的参考,不能生成外键    
   private Card cardId;     
   ...    
   get,set方法    
   ...    
} 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值