SSH——Hibernate实体关联映射总结(一)

一、n:1实体关系映射

1、实体:
<span style="font-size:18px;">public class User1 {
	private int id;
	private String name;
	private Group group;
{
public class Group {
	private int id;
	private String name;
{</span>
2、配置
<span style="font-size:18px;"><!--user为多的一端,在userxml中加入manytoone引入group-->
	<class name="com.bjpowernode.hibernate.User1">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		
		<many-to-one name="group" column="groupid" cascade="save-update"></many-to-one>
	</class>

	<class name="com.bjpowernode.hibernate.Group" table="t_group">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
	</class></span>
3、测试
<span style="font-size:18px;">	User1 user= (User1)session.load(User1.class, 4);
	System.out.println(user.getGroup().getName());</span>


总结:n:1的实体关联创建时,在多的一端加入外键,指向1的一端,具体是通过在实体中注入Group group的属性,配置文件中加入<many-to-one>标签,name指向user中group属性名,column对应t_user表中外键groupid,从而实现了通过user中groupid外键关联,可查看user所在group信息。

二、1:1主键关联
1、双向

1)、实体

<span style="font-size:18px;"><span style="white-space:pre">	</span>public class Person {
	private int id;
	private String name;
	
	//在person中有idcard的关联	
	private Card idCard;
	}</span>
<span style="font-size:18px;">	public class Card {
	private int id;
	private String cardNo;
	
	//双向  有card信息要能加载显示person信息
	private Person person;
	}</span>
2、配置
<span style="font-size:18px;"><hibernate-mapping>
	<class name="com.bjpowernode.hibernate.Person" table="t_person">
		<id name="id">
		<!-- <!-- 采用foreign生成策略,forgeign会取得关联对象的标识 -->  -->
			<generator class="foreign">
				<param name="property">idCard</param>
			</generator>
		</id>
		<property name="name"/>
		
		<!-- 指示默认关系字段,根据对端主键生成自己的主键   constrained生成外键约束语句-->
		<one-to-one name="idCard" constrained="true"></one-to-one>
	</class>
	</hibernate-mapping>


	<hibernate-mapping>
	<class name="com.bjpowernode.hibernate.IdCard" table="t_idCard">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="cardNo"/>
		<one-to-one name="person"/>
	</class>
</hibernate-mapping>
</span>
3、测试
<span style="font-size:18px;"><span style="white-space:pre">		</span>IdCard idCard = new IdCard();
		idCard.setCardNo("1111111111111111");
			
		Person person = new Person();
		person.setName("张三");
		//建立关联
		person.setIdCard(idCard);
			
		//没有抛出TransientObjectException
		//是由一对一关联映射的特性决定的,它必须先保存关联对象IdCard
		//这样它采用foreign映射策略才能取得关联对象的标识
		//也就是它默认了cascade属性
		session.save(person);</span>

2、单向
     单向于双向不同就在于:只能通过person看idCard,反之则不行。通过Card类中取消对Person类的注入,同时取消card配置中<one-to-one>标签即可。
三、1:1外键关联
1、双向
1)、实体类-同1:1主键关联
2)、配置xml

<span style="font-size:18px;"><class name="com.bjpowernode.hibernate.Person" table="t_person">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<many-to-one name="idCard" unique="true"/>
</class>


	<class name="com.bjpowernode.hibernate.IdCard" table="t_idCard">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="cardNo"/>
		<one-to-one name="person" property-ref="idCard"/>
	</class></span>

2、单向


card类中取消person属性,card.xml普通配置即可。同1:1主键单向


评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值