05-关联关系映射1
- 格式:doc
- 大小:1.74 MB
- 文档页数:5
单向多对一
单向一对多
双向一对多(多对一)
单向多对一
单向一对多
双向一对多(多对一)
回顾Hibernate:
1. hibernate开发环境搭建
----》 引入jar: hibernate.jar + required + jpa + 驱动包
---》 hibernate.cfg.xml
---》 javabean/*.hbm.xml
---》 Application 测试
2.hibernate api
----》 Configuration
----》 SessionFactory
----》 Session
---》 Transaction
---》Query
---》Criteria
---》SQLQuery
3.配置
---》 主配置
---》映射配置
*.hbm.xml
4. hibernate 程序执行流程
目标:
关联映射(hibernate映射)
1. 集合映射
2. 一对多与多对一映射 (重点)
3. 多对多映射
4. inverse/lazy/cascade
1. 集合映射
开发流程:
需求分析/数据库设计、项目设计/ 编码/测试/实施部署上线/验收
需求:
用户购买, 填写地址!
数据库:
代码:
// javabean设计
public class User {
private int userId;
private String userName;
// 一个用户,对应的多个地址
private Set address;
private List addressList = new ArrayList();
//private String[] addressArray; // 映射方式和list一样
name="">
private Map addressMap = new HashMap();
}
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
1. 多对一的关联映射;
多对一的关联映射;
Many
– to
– on e
生成的映射表
在user表中多了一个字段
groupId
2. one to one
一对一的关联映射 单向 外键 查询 先存idcard 的id 然后person 里面的id是根据idcard 里面的id 设置 的
One-to – one 主键 关联生成的表
3. one to one
双向查询
加上面的person外
还要在idcard
表中
这也是外键关联
生成的映射表
One-to
– one表和上面的一样
但是
可能双向查询
One to one 单向
生成的表 多一个字段 和多对一是一样的
4.
One to one 双向 加上上面的person 表
生成的映射表:
可以进行双向查询
System.out.println(idcard.getCardNo())
System.out.println(idcard.getPerson().getName());
5.
One to many 在多的那端来维护 单向
不过在classes 类中要用到 private Set
student 把多的设置成一个集合 放到一的一端
里面classesid 不能设置no-null=true 这个属性则存不进去的
生成 的映射表如下:
6.
One to many 双向
加上面的classes
表
生成的映射表如下:还是和上面的一样的啊
7.many – to – many
要用到第三方的表 t_user_role User类中
Set中的name 是user中设置的 用set 设置的roles 建立三方表
Key中是column 中的userid 与 role映射表中many –to – many 中的column 中的值 是一样的
Role类中】、
第 1 页 共 2 页 hibernate关联映射详解
一对多关系 1.一对多关系(单向): 在一端映射文件中加入:
name= student keyumn= classes / one-to-many > /set 2.一对多关系(双向): (1).在一端映射文件中加入: setname=
student keycolumn= classesid / one-to-many > /set
(2).在多的一端加入: many-to-onename= classes column=
classesid /many-to-one 多对一关系 在多的一端加入:
many-to-one name= classes column= classesid / 一对一关系 1. 一对一外键关联 单向:(它其实就是一个多对一映射的一个特例,只是设置ue=”ue”) 在维护关系一端的映射文件中加入:
many-to-onename= card unique= true cascade= all /many-to-one
双向: 在维护关系一端的映射文件中加入: many-to-onename= card
unique= true cascade= all /many-to-one 在另一段的映射文件中加入: one-to-onename= users property-ref= card /one-to-one 因为 one-to-one name 标签默认是找关联主键,所以在这里需要property-ref= card 配置关联属性。Cascade属性是级联的意思。 2.
一对一主键关联 a) 单向 在维持关系一端的代码: classname=
er_pk idname= id generator >
Hibernate 映射关联关系
一、映射多对一关联关系。
1.单向的多对一
(1)以 Customer 和 Order 为例:一个用户可以发出多个订单,而一个订单只能属于一个客户。从 Order
到 Customer 是多对一关联关系。
(2)创建 Customer 和 Order 表。
Create
(3)用 Intellij Idea 自动生成关联关系,以及对应的 Entitiy.hbm.xml 和 持久化类。
说明:
其中 Type 是用来修饰对应的 Attribute Name 的。
在 Order 端,定义 Customer 类,一个订单属于一个客户。而在 Customer 端,一个客户可以有多个订单,因为是单向的,所以这里放弃属性的添加。
在 Join Columns 定义了 Order 和 Customer 之间的关联关系,order 表中的 customer_id 外键和
customer 表中的 customer_id 主键关联。
来看生成的 Schema:
没有勾选 customer_id,是因为 Intellij Idea 没法直接映射为 Customer 类型的 customer。
Order.hbm.xml
使用 节点来维护多对一关联关系。
name 属性:多这一端关联的一那一端的属性的名称。
class 属性:关联的一端的属性的类型。
column 属性:一那一端在多的一端对应的数据表中的外键。可以任意命名,但需要和数据表中的字段对应。
(4)单向多对一的 CRUD 以及需要注意的问题。
<1> 新增
—
欢迎下载 2 ①先保存一的一端 Customer,后保存多的一端 Order。
Save.java
打印 SQL:
Output
结论:发送了3条 INSERT 语句。
②先保存多的一端 Order,再保存一的一端 Customer。
Save2.java