第九章 关系映射 一对一关系 唯一外键方式实现一对一

如:person与idCard

基于外键的one-to-one可以描述为多对一。

hibernate一对一唯一外键关联映射(双向关联Person<---->IdCard)
一对一唯一外键双向关联,需要在另一端(person),添加<one-to-one>标签,指示hibernate如何加载其关联对象,默认根据主键加载idcard,外键关联映射中,因为两个实体采用的是idcard的外键维护的关系,所以不能指定主键加载idcard,而要根据idcard的外键加载,所以采用如下映射方式:
<one-to-onename="idcard" property-ref="person"/>

id_card表中有一个person_id的外键。

实体类和根据共享主键方式中的一样,不变。


Person.hbm.xml:

<hibernate-mapping>
    <class name="cn.framelife.hibernate.entity.Person" table="person" catalog="hibernate">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="45" not-null="true" />
        </property>
         <!-- 没有下面的one-to-one标签也行,但那样就变成了单向关联(IdCard ----》 Person) ,也就是当知道IdCard后,能找到它属于的对应的人,但知道某人后,却无法找到相对应的IdCard-->  
        <one-to-one name="idCard" property-ref="person"/>  
    </class>
</hibernate-mapping>

IdCard.hbm.xml:

<hibernate-mapping>
	<class name="cn.framelife.hibernate.entity.IdCard" table="id_card"
		catalog="hibernate">
		<id name="id" type="java.lang.Integer">
			<column name="id" />
			<generator class="native" />
		</id>
		<property name="cardNo" type="java.lang.String">
			<column name="card_no" length="45" not-null="true" />
		</property>
		<!-- 
		指定多的一端的unique=true,这样就限制了多的一端的多重性为一   
                  通过这种手段映射一对一唯一外键关联 
        -->  
		<many-to-one name="person" column="person_id" unique="true" />  
	</class>
</hibernate-mapping>


增加与查询操作和结果都与共享主键方式中是一样的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值