实体关联映射:
1、一对一映射:
主要有两种方式来映射:
一、基于外键的映射方式:
首先有两张表,例如:user 和
card;card 表中参照一个user的主键id
首先就是要保证这两个类中,必须要分别有各自的一个连接;
也就是说在各个类中有另外一个类的一个属性;比如说:
class User
{
private Card card;//card的一个属性
}
class Card
{
private User
user;//user的一个属性
}
这个时候配置就是在user的配置文件user.hbm.xml中;
<one-to-one name="card" class=""
cascade="save-update" property-ref="user"/>
注意这里的property-ref属性:它是指在映射中,user找到card是通过user这样一个属性来找到的,如果不这样设置,那么就会在关联中出现user的id和card的id相关联的情况;
而在card的配置文件中;
<many-to-one
name="user" class="" column="userid" unique="true">
注意这里column指如何找到user呢?是通过在表中的userid来找到的。而这里的
unique指的是限制为了一对一
二、基于主键的约束
这里仍然有两张表,这两张表分别是:user 和 card 而这个时候,在card表中,并没有userid
这一列,但是还是有一个参照userid的外键约束,这里的card中的id主要就是参照的是user中的id
而上面基本上没有什么改变。只是在配置文件中;
在user的配置文件中,
<one-to-one name="card" class=""
cascade="save-update"/>
这里不需要配置property-ref属性
在card中
<one-to-one name="user" class=""
constrainted="true"/>
另外在主键中也要改;开始的时
<id name="" type="">
<column name=""/>
<generator
class="native"/
>
</id>
这里应该改为:
<id name=""
type="">
<column name=""/>
<generator
class="foreign">
<param
name="property">user</param>
</generator>
</id>
2、一对多、多对一、以及双向多对一关联关系;
首先讨论多对一的单向关联:这里有两张表;分别是email和user表;email为多的一方,而user为一
的一方,因为一个人可以有多个EMAIL
email:id,emailname,uid;
user: uid, uname
有持久化类:User 和 Email
这里所谓单向就是说查询email表可以查出这个email是属于谁的,但是只查询user表不知道有多少个Email;
因此在持久化类中在多的一方,有一个一的一方的对象的属性;而在一的一方没有这方面的信息;
所以在配置的时候就只在多的一方(email)中配置
<many-to-one name="user" class=""
column="uid
"/>这样就够了;但是这个时候在持久化的时候需
要都调用save方法,这个时候还要加个级联属性:cascade=“all(save-update)”,那么这个时候
只需要持久化这个email对象就够了,而不需要持久化user了。同时还有一个属性就是:outer-join
;这个属性是指在查询的时候是否使用外连接;如果不使用,那么查询的时候就会查询两次;
另外,再讨论一下一对多的单向关联:
从一的一方看,这就是一对多的关系,表同上,只是在持久化中就有点区别了,这里在User中有个包
含set集合的属性,而在email中没有任何的设置,先前的user属性也不需要了,因为这是单向的影射
,所以不需要这样的设置。而在映射文件中就只在uses一方设计就好了。
<set name="emails"
table="email">
<key column="uid"></key>
//这里的key是在email表中参照user表的外键
<one-to-many class="Email">
//这里的class肯定是填的是many这一方的类名
</set>
最后再说一下多对一双向关联,只要把两边都加上,能让你找到我,让我找到你的话就可以了。
3、多对多关联(比较典型的就是权限设计的时候)
在做多对多关联映射的时候,都会有一张关联表;
第一、单向多对多
第二、双向多对多
单向多对多跟双向多对多本身没有多大的区别,只是必须有一边来维护他们之间的关系;
比如说:有两张表;user 和 power表
要建立它们的多对多的影射关系,那么这里必须在数据库中再建立一张表(连接表)user_power
那么在持久化类中设置一个属性--set。那么需要在映射文件中配置这个set的映射
<set name="" table="关联表名">
<key column=""></key>
<many-to-many class=""
column="">
</set>
下面来解释一下中间属性的作用;
A:
name:这里就是配置在所在持久化类中的set属性名
B:table:这里就是关联表名,因为它们的关系就是靠这张关联表来维护
C:column:这里设置的是在关联表中,与持久化类所在表的关联字段
D:class:这里的many端,也就是name所对应的类;
E:第二个col
分享到:
相关推荐
Hibernate实体关联关系映射--学习总结,让同仁们更好的学习Hiebernate
Hibernate实体关联关系映射--学习总结.pdf
本速查表没有打成CHM! Hibernate实体映射表实用性较强! 希望大家喜欢!
Hibernate 实体关联关系映射 学习总结 把一对一 一对多 单向 双向 主键 外键 链接表等讲的比较清楚
:Hibernate有两种映射实体一对一关联关系的实现方式:共享主键方式和唯一外键方式。 共享主键方式: 所谓共享主键方式就是限制两个数据表的主键使用相同的值
Hibernate Annotation几种关联映射 一对一(One-To-One) 使用@OneToOne注解建立实体Bean之间的一对一关联。一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键...
hibernate单向一对多关联映射(注解版)
详细描述了hibernate3中的实体映射
hibernate多对一关联映射(Hibernate_Many2One) 7 hibernate一对一主键关联映射(单向关联Person---->IdCard) 8 hibernate一对一主键关联映射(双向关联Person<---->IdCard) 9 hibernate一对一唯一外键关联映射...
hibernate的表关联操作,通过映射关系操作实体类增删改查数据库-hibernate02
第15章 映射实体关联关系 15.1 映射一对一关联 15.1.1 按照外键映射 15.1.2 按照主键映射 15.2 映射单向多对多关联 15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用...
自己根据课本总结的使用hibernate时,实体类间映射文件即*.hbm.xml文件的写法。如果你正在学习hibernate,保证会对你有所帮助。
案例目录: 01 01Hibernate_Handwork : 手工配置使用Hibernate,其中详细标了...07 07Hibernate_Mapping : Hibernate中的数据关联技术,是一个重点又是一个难点,演示了 一对一、多对一、一对多、多对多等几种情况。
第四课:hibernate多对一关联映射 ...................... Spring: 第一课:构建Spring的环境并建立一个例子 第三课:spring Bean的作用域 第四课:spring对AOP的只是(采用Annotation的方式) 第五课:spring对AOP...
第7章 高级实体关联映射 7.1 单值的实体关联 7.1.1 共享的主键关联 7.1.2 一对一的外键关联 7.1.3 用联结表映射 7.2 多值的实体关联 7.2.1 一对多关联 7.2.2 多对多关联 7.2.3 把...
传智播客李勇hibernate源码1-20课,目录如下:01_hibernate介绍与动手入门体验;02_hibernate入门案例的细节分析; 03_hibernate入门案例的代码优化; 04_Session接口及get|... 20_一对一外键关联关系的映射与原理分析
2.2.5. 映射实体Bean的关联关系 2.2.5.1. 一对一(One-to-one) 2.2.5.2. 多对一(Many-to-one) 2.2.5.3. 集合类型 2.2.5.4. 用cascading实现传播性持久化(Transitive persistence) 2.2.5.5. 关联关系获取 2.2.6. ...
第一讲 Hibernate概述 第二讲 对象-关系映射基础 第三讲 复杂实体映射 第四讲 关联映射 第五讲 Hibernate查询
2.2.5. 映射实体Bean的关联关系 2.2.5.1. 一对一(One-to-one) 2.2.5.2. 多对一(Many-to-one) 2.2.5.3. 集合类型 2.2.5.4. 用cascading实现传播性持久化(Transitive persistence) 2.2.5.5. 关联关系获取 2.2.6. 映射...