八、 映射(重点掌握和理解,注意配置的细节)
关联关系:A有可能使用B,则AB之间有关联关系(Java里指A有B的引用)。
双边关系、传递性、方向性、名称、角色(权限)、数量(1:1;1:m;n:m)、关联强度
委托:整体跟部分之间是同一类型。
代理:整体跟部分之间不是同一类型。
A. 单一实体映射:最简单、基本映射(最重要);任何其他映射种类的基础。
原则:
1.类->表;一个类对应一个表。
2.属性->字段:普通属性、Oid;一个属性对应一个字段。
B. 实体关系映射:
a.关联关系映射:(最难、量最多)
1.基数关系映射:
一对一(one to one) (共享主键、唯一外键)
一对多(one to many) (1:m) 作级联,删one后连着删many
多对一(many to one) (m:1) 不作级联,删many中一个,不删one
多对多(many to many)(n:m = 1:n + m:1)
2.组件关系映射:(一个类作为另一个类的零件,从属于另一个类,没有自己的XML)
单一组件关系映射
集合组件关系映射
b.继承关系映射:(最普遍。两个类有继承关系,在本质上他们就是一对一关系。共享主健。)
有三种映射方案:
1.一个类一个表(效率很低;最后考虑使用,一般是数据量较大和父子类重复字段不多的时候用)
只有当子类中的属性过多时才考虑每个类建一个表的策略。
2.一个实体一个表(多表查询效率低,不考虑多态时用)
不考虑多态时,最好是用只针对具体类建表,而考虑多态时尽量使用所有类建一个表
3.所有类一个表(查询效率最高,结构简单;字段数不超过100个时使用,首选)
c.集合映射(值类型)
Set 不重复、无顺序
List 可重复、有顺序
Map
Bag 可重复、无顺序(bag本身也是list实现的)
双向关联(Bidirectional associations)(相当于两个单向关联)
单向关联(Unidirectional associations)
"一"方的配置:
<!-- 表明以Set集合来存放关联的对象,集合的属性名为orders;一个"customer"可以有多个"order" -->
<!-- inverse="true"表示将主控权交给order,由order对象来维护关联关系,
也就是说order对象中的关联属性customer的值的改变会反映到数据库中 -->
<set name="orders" cascade="save-update" inverse="true">
<!-- 表明数据库的orders表通过外键customer_id参照customer表 -->
<key column="customer_id"/>
<!-- 指明Set集合存放的关联对象的类型 -->
<one-to-many class="many_to_one.vo.Order"/>
</set>
"多"方的配置:
<many-to-one
name="customer"
class="many_to_one.vo.Customer"
column="customer_id"
not-null="true"
cascade="save-update"
/>
cascade属性:设定级联操作(插入、修改、删除)。
cascad属性值
|
描述
|
none
|
保存、更新或删除当前对象时,忽略其他关联对象,默认属性值
|
save-update
|
通过Session的save()、update()以及saveOrUpdate()方法来保持、更新当前对象时级联,所有关联的新建对象,并且级联更新所有有关联的游离对象
|
delete
|
当通过Session的delete()方法来删除当前对象时,级联删除所有关联对象
|
all
|
包含所有的save-update以及delete行为
|
delete-orphan
|
删除所有和当前对象解除关联关系的对象
|
all-delete-orphan
|
包含all与delete-orphan的动作
|
inverse属性:表示是否将当前属性的值的变化反映到数据库中去。
false --- 表示反映到数据库中
true ---表示不反映到数据库中
Set的lazy属性:
A.不设置lazy值,默认true 现象:查询Customer时,不会主动查询关联表Orders(SQL语句)
B.设置lazy=false 现象:出现查询Orders表的SQL语句
3、多对多
默认情况下,由两方共同维护关联关系。也就是两个对象关联属性的值的改变都会反映到数据库中。
九、 Hibernate控制的事务
事务保证原子操作的不可分,也就是操作的同时成功或同时失败。
hibernate的事务隔离级别和JDBC中大致相同。
设置时要在hibernate.cfg.xml配置
<property name="hibernate.connection.isolation">4</property>
1: 读未提交的数据(Read uncommitted isolation) 脏读
2: 读已提交的数据(Read committed isolation) 不可重复读
4: 可重复读级别(Repeatable read isolation) 幻读
8: 可串行化级别(Serializable isolation)
hibernate的锁(悲观锁,乐观锁)
1.悲观锁是由数据库本身所实现的,会对数据库中的数据进行锁定,也就是锁行。(更新期间不许其他人更改)
LockMode.UPGRADE,修改锁,在get()方法中加上这个设置作为第三个参数。
LockMode.NONE 无锁机制
LockMode.READ 读取锁
LockMode.WRITE 写入锁,不能在程序中直接使用
还可以使用Session.lock() Query.setLockMode() Criteria.setLockMode()方法来设置锁,检测版本号,一旦版本号被改动则报异常。
2.乐观锁,也就是通过对记录加上某些信息来解决并发访问的问题。(认为更新期间不会有其他更改)
版本检查;要在其表中多加上一列表示版本信息,会在读取时读到这个版本号,并在修改之后更新这个版本号;
更新瞬间加锁,并且只有版本号相同才会予以更新,如果版本号不同,就会抛出例外。
<version name="version" column="version" type="integer" />
分享到:
相关推荐
【传智播客 Hibernate 笔记】是一份深入学习 Hibernate ORM 框架的资源集合,包括了 word 笔记、pdf 讲义、源代码以及相关分析图表和 jar 包,旨在帮助开发者全面理解并掌握 Hibernate 的核心概念与实际应用。...
【hibernate_day02笔记】的文档主要涵盖了学习Hibernate框架的基础内容,包括ORM思想、Hibernate入门案例、配置文件解析、核心API的使用等。以下是详细的讲解: **ORM思想**: ORM(Object-Relational Mapping)即...
接下来是“马士兵hibernate学习笔记.doc”。Hibernate是一个对象关系映射(ORM)框架,它简化了Java应用对数据库的操作。Hibernate允许开发者使用Java对象来操作数据库记录,减少了SQL的编写工作。笔记可能讲解了...
hibernate笔记.pdf 和 Hibernate学习笔记.pdf** 这两份笔记可能由经验丰富的开发者整理,包含他们在学习和使用Hibernate过程中积累的实用技巧和常见问题解决方案。这些个人经验往往能提供独特的视角和实战经验,...
在本篇“Hibernate学习笔记”中,我们将深入探讨Hibernate——一个流行的Java对象关系映射(ORM)框架。Hibernate的核心功能是将Java应用程序中的对象模型自动持久化到关系数据库中,简化了数据库操作。通过使用...
这份名为“软件工程师学习笔记大全(C++,JAVA)4.rar”的压缩文件包含了软件工程师在学习C++和Java编程语言时的重要参考资料。这些文档详细涵盖了从基础到高级的各种主题,对于提升技能和准备面试非常有帮助。以下...
【Hibernate.doc】 这个文件名表明笔记是以Microsoft Word文档(.doc)格式存储的,可能包含了关于Hibernate的详细讲解、示例代码和学习指南。文档可能涵盖了以下关键知识点: 1. **对象关系映射(ORM)原理**:...
本学习笔记是作者在大学期间深入学习Mybatis后的整理,旨在帮助初学者快速入门并掌握其核心概念与功能。 笔记共分为11个章节,涵盖Mybatis的基础到高级应用,以下是主要知识点的详细讲解: 1. **Mybatis简介**:...
【Spring 学习笔记概述】 Spring 是一个广泛使用的 Java 应用框架,尤其在企业级应用开发中占有重要地位。其核心特性是依赖注入(Dependency Injection,DI)和控制反转(Inversion of Control,IoC),这两者是...
张龙圣思园的Struts2学习笔记,无疑为Java开发者提供了一份宝贵的参考资料,它可能涵盖了Struts2的基础概念、核心组件、配置方式以及实战技巧。 首先,让我们深入了解Struts2的核心特性。Struts2是MVC(Model-View-...
"笔记"可能是PDF或Word文档,包含了课程的重点内容和学习者的心得体会,而"PPT"可能包含课程的每堂课的主题、关键概念和示例代码,帮助学习者系统地掌握Hibernate的使用。 通过这个教程,学习者可以期待掌握以下...
【压缩包子文件的文件名称列表】:“Hibernate第一天课堂笔记.docx”是一个Microsoft Word文档,很可能包含了该日课程的详细笔记,包括主要概念、关键点、例子和可能的练习。这些笔记通常会覆盖以下内容: 1. **...
《软件工程师学习笔记大全》是一份综合性的学习资源,涵盖了软件开发中的多个核心技术和框架,主要针对C++和JAVA两大编程语言。这份资料是软件工程师提升技能、深入理解编程概念和框架应用的理想参考资料。 首先,...
本资源是韩顺平 Java 从入门到精通视频教程的学习笔记,涵盖了 Java 基础知识、面向对象编程、图形界面开发、数据库编程、文件IO流编程、网络编程、多线程编程等方面的知识点。 Java 基础知识 * Java 开发平台标准...
这个压缩包中的Word文档格式使得笔记易于阅读和编辑,对于学习者来说,可以方便地做笔记、添加注释或进行个性化整理。在学习过程中,结合实际编程练习,可以更好地理解和掌握Java编程技能,从而提升编程能力。
【描述】"方立勋JavaWeb视频前十一天笔记word"描述的是根据方立勋的视频教程制作的学习笔记,以Word文档的形式记录下来,便于回顾和复习。这表明笔记内容可能包括了视频课程中的关键讲解,重点难点以及实践案例。 ...
笔记可能涉及了ORM(对象关系映射)概念、配置文件、实体类的定义、Session和Transaction管理、HQL(Hibernate查询语言)以及一对多、多对一、一对一等关联映射的实现。 4. **Spring笔记.doc**: Spring框架是J2EE...