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

来源:互联网 发布:喀秋莎软件加片头 编辑:程序博客网 时间:2024/06/05 15:03

一、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主键单向


0 0
原创粉丝点击