hibernate一对一关联

1. 一对一主键的双向关联 

一个公司对应一个地址, 一个地址对应一家公司

public class Company {
	private Integer id;
	private String name;
	private Address address;  // 一家公司对应一个地址
}
public class Address {
	private Integer id;
 	private String city;
	private String country;
	private Company company;  // 一个地址含有一家公司
}
Company.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="cn.itcast.Company" table="companypk">
		<id name="id" column="id" type="integer">
			<generator class="identity"/>
		</id>
		<property name="name" column="name" type=”string”/>
		<!--配置Company和地址的一对一关联-->
		<one-to-one name="address" class=”cn.itcast.Address”/>
	</class>
</hibernate-mapping>
Address.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="cn.itcast.Address" table="addresspk">
		<id name="id" column="id" type="integer">
			<!—
			foreign: 表示主键生成策略使用foreign
				       * 即addresspk表的主键的生成参照另一个表(companypk) 的主键
            -->
			<generator class="foreign">
				<!—
					property: Address类对应表主键的生成,参照该类中的属性company
				-->
				<param name=”property”>company</param>
			</generator>
		</id>
		<property name="city" column="city" type=”string”/>
         <property name="country" column="country" type=”string”/>
		<!-- one-to-one 配置Address和Company的一对一关联
               constrained=”true”: 为addresspk增加外键约束
        -->
		<one-to-one name="company" class=”cn.itcast.Company” constrained=”true”/>
	</class>
</hibernate-mapping>

2. 一对一外键的双向关联

Company.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="cn.itcast.Company" table="companyfk">
		<id name="id" column="id" type="integer">
			<generator class="identity"/>
		</id>
		<property name="name" column="name" type=”string”/>
		<!--
			通过many-to-one增加唯一约束实现一对一关联
			unique=”true” 设置companyfk表的外键唯一
			column=”aid” 必须卸载many-to-one中才可用,不能使用column标签
		-->
		<many-to-one name="address" class=”cn.itcast.Address” column=”aid” unique=”true”/>
	</class>
</hibernate-mapping>

Address.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="cn.itcast.Address" table="addressfk">
		<id name="id" column="id" type="integer">
			<generator class="identity">
			</generator>
		</id>
		<property name="city" column="city" type=”string”/>
         <property name="country" column="country" type=”string”/>
		<!--
               property-ref=”address” : 建立从address对象到company对象的关联
		-->
		<one-to-one name="company" class=”cn.itcast.Company” property-ref=”address”/>
	</class>
</hibernate-mapping>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值