三:关联映射
类与类之间最普遍的关系就是关联关系,关联映射的本质:将关联关系映射到数据库,所谓的关联关系是对象模型在内存中的一个或多个引用。
(1)多对一单向关联关系
例如,客户(Customer)和订单(Order)的关系,一个客户能发出多个订单,而一个订单只能属于一个客户。从Order到Customer的关系是多对一关系,意味着每个Order对象都会引用一个Customer对象。
那么在Order的xml中要加入
<many-to-one
name="customer"
column="CUSTOMER_ID"
class="mypack.Customer"
not-null="true"
/>
在Order.hbm.xml中<many-to-one>元素建立了Customer和ORDERS表的外键CUSTOMER_ID之间的映射。
它包括如下属性。
● name:设定待映射的持久化类的属性名,此处为Order类的customer属性。
● column:设定和持久化类的属性对应的表的外键,此处为ORDERS表的外键CUSTOMER_ID。
● class:设定持久化类的属性的类型,此处设定customer属性为Customer类。
● not-null:如果为ture,表示customer属性不能为null,默认为false。
映射原理:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一
(2)一对多的单向关联关系
例如,客户(Customer)和订单(Order)的关系,一个客户能发出多个订单,而一个订单只能属于一个客户。从Customer到Order的关系是一对多关系,意味着每个Customer对象都会引用一个集合属性存放Order对象。
那么在Customer的xml中要加入
< set name=" orders" >
< key column = " CUSTOMER_ID " />
< one-to-many class = "com.fendou.domain.Order " />
</ set >
此时通过 < key column = " CUSTOMER_ID " /> 在多的一端(Order)添加了一个外键 “CUSTOMER_ID” 指向一的一端。在一的一端通过orders维护多的一端。
多对一及一对多关联映射的区别(单向):
不管多对一还是一对多,都是在" 多" 的一端添加一个外键指向" 一" 的一端,只不过是多对一是在多的一端为其自己添外键,而一对多则是在一的一端为多的一端添加外主键。
(3) 一对一关联
例如,注册用户(User)和用户详细信息(Useronfo)的关系
A: 一对一以外键关联
以外键关联的概念:两个实体各自有不同的主键,但是一个实体有一个外键引用另一个实体的主键。例如: 表 user id pk,name,passeword userinfo id pk,uid fk,infor
User.hbm.xml
<one-to-one name="userinfo" class="com.fendou.domain.Userinfo" />
Useronfo.hbm.xml
<many-to-one name="user" class="com.fendou.domain..User" columnn="uid" unique="true" />
唯一的多对一,其实就便成了一对一了
B: 一对一以以主键关联
关联的两个实体共享一个主键例, User和Useronfo共享一个主键id,并且两个表是一对一关系,那么如何让一个表引用另一个表生成的主键?我们可以用hibernate的主键生成策略foreign机制生成
我们 Useronfo 主键是根据Use来生成的所以User可以不用修改,我们只需修改Useronfo.hbm.xml
<hibernate-mapping>
<id name="id">
<generator name="foreign">
<param name="property">user</param>
</generator>
</id>
<one-to-one name=" user " constrained="true"></one-to-one>
在Useronfo的id主键上,使用foreign表示与外键共享主键,也就是与User实体共享主键,而constrained设定为true,表示约束Useronfo的主键必须与user中对应资料的主键相同。
(4)多对多映射
hibernate的多对多映射是通过一个中间表来实现的。中间表是纽带。多对多中。两个JAVA对象如何才能表示多对多?我们最容易想到的方式就是在各自的成员变量里面,都包含一个集合(Set),来包含N多个另外一个对象。
假设A,B两个类多对多:
在 A.hbm.xml中,有下面一项:
<set name="A中的Set<B>" table="A-B中间表名">
<key column="外键A"/>
<many-to-many class="类名B" column="外键B"/>
</set>
这里的"外键A"就是"中间表"中相对于A的ID,也就是说这个column是在"A-B中间表"中的某一个column ,对应的ID是"A的表"中的ID
这里的"外键B",也是在 "A-B中间表"中的column,对应的ID就是"B的表"中的ID了。
一对一主键关联关系person—IdCard
主对象person 从对象idCard idCard 的主键生成是foreign<generator class=”foreign”>
<param name=”property”>person</param></generator> <one-to-one name=”person”></one-to-one> person是idCard的属性 名字不能乱给,另外如果没有主对象则就不能保存从对象
当查询主对象Person p=(Person) session.get(Person.class ,id)时并且查了两个对象只会出现一条语句,而查询从对象时
当查询两个对象时就会发出两条记录,当查询一个对象时只会发出一条语句来。
级联和关系维护
相关推荐
包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。
了解数据表之间以及对象之间的三种关联关系 2.熟悉关联关系中的嵌套查询和 嵌套结果 3.掌握一对一,一对多,和多对多关联映射作用
* * * * * MyBatis的关联映射 为什么学习MyBatis关联关系? 9.1 关联关系概述 实际的开发中,对数据库的操作常常会涉及到多张表,这在面向对象中就涉及到了对象与对象之间的关联关系。针对多表之间的操作,MyBatis...
jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联...
MyBatis关联映射代码
该资源包含了一些常用的hibernate关联映射实例。包括一对多,多对多,继承映射,等,是学习hibernate的必备品
MyBatis框架的学习(五)——一对一关联映射和一对多关联映射
SpringBoot中mybatis表关联映射关系(一对多嵌套:结果方式)
teacher表和student的关联,一对多的关联映射.
Hibernate双向一对一关联映射(注解版)
使用MyBatis写的一对一关联映射完整代码,在eclipse上写的,使用的Mysql进行数据连接,内含数据库脚本,直接导入数据库即可建数据库和建表,不用再编写,非常方便
分别说出这三种关系属于MyBatis关联关系的哪种类型,通过在相应表中添加合适的外键或创建中间表的方式实现这些关联关系,并创建相应的类,实现以下的查询: (1)通过Student表的id查找该学生的信息,并同时获取其学号...
Mybatis关联映射 Mybatis关联映射 Mybatis关联映射 Mybatis关联映射 Mybatis关联映射
hibernate 的基础 常用的主键生成策略 持久化对象的三种状态 一级缓存的常用操作(save/update/saveOrUpdate/delete)一对多关联映射 级联操作
一、本章目标 1关联关系概述 2、一对一 ...针对多表之间的操作,MyBatis提供了关联映射,通过关联映射就可以很好的处理对象与对象之间的关联关系。本章中,将对MyBatis的关联关系映射进行详细的讲解。
NULL 博文链接:https://1028826685.iteye.com/blog/1536060
JPA学习笔记-EJB-04JPA关联映射总结 JPA JPA关联映射JPA学习笔记-EJB-04JPA关联映射总结 JPA JPA关联映射
Hibernate Annotation几种关联映射 一对一(One-To-One) 使用@OneToOne注解建立实体Bean之间的一对一关联。一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键...
文件中包含关于hibernate 各个属性的解释
Hibernate的映射策略:一对一双向关联映射,有所有的测试用例,用以证明从任何一端都可以加载另一端信息。