`

我的hibernate学习笔记(4)完 ---附完整word格式文件

阅读更多

八、 映射(重点掌握和理解,注意配置的细节)

    关联关系:A有可能使用B,则AB之间有关联关系(Java里指AB的引用)

            双边关系、传递性、方向性、名称、角色(权限)、数量(1:11:mn: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

通过Sessionsave()update()以及saveOrUpdate()方法来保持、更新当前对象时级联,所有关联的新建对象,并且级联更新所有有关联的游离对象

delete

当通过Sessiondelete()方法来删除当前对象时,级联删除所有关联对象

all

包含所有的save-update以及delete行为

delete-orphan

删除所有和当前对象解除关联关系的对象

all-delete-orphan

包含alldelete-orphan的动作

 

 

    inverse属性:表示是否将当前属性的值的变化反映到数据库中去。

            false --- 表示反映到数据库中

            true ---表示不反映到数据库中

    Setlazy属性:

       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" />

2
0
分享到:
评论

相关推荐

    传智播客 hibernate笔记(word+pdf+源码)

    【传智播客 Hibernate 笔记】是一份深入学习 Hibernate ORM 框架的资源集合,包括了 word 笔记、pdf 讲义、源代码以及相关分析图表和 jar 包,旨在帮助开发者全面理解并掌握 Hibernate 的核心概念与实际应用。...

    hibernate_day02笔记

    【hibernate_day02笔记】的文档主要涵盖了学习Hibernate框架的基础内容,包括ORM思想、Hibernate入门案例、配置文件解析、核心API的使用等。以下是详细的讲解: **ORM思想**: ORM(Object-Relational Mapping)即...

    SSH学习笔记--整理.rar

    接下来是“马士兵hibernate学习笔记.doc”。Hibernate是一个对象关系映射(ORM)框架,它简化了Java应用对数据库的操作。Hibernate允许开发者使用Java对象来操作数据库记录,减少了SQL的编写工作。笔记可能讲解了...

    hibernate学习资料大合集

    hibernate笔记.pdf 和 Hibernate学习笔记.pdf** 这两份笔记可能由经验丰富的开发者整理,包含他们在学习和使用Hibernate过程中积累的实用技巧和常见问题解决方案。这些个人经验往往能提供独特的视角和实战经验,...

    hebernate 学习笔记 46页word

    在本篇“Hibernate学习笔记”中,我们将深入探讨Hibernate——一个流行的Java对象关系映射(ORM)框架。Hibernate的核心功能是将Java应用程序中的对象模型自动持久化到关系数据库中,简化了数据库操作。通过使用...

    软件工程师学习笔记大全(C++,JAVA)4.rar

    这份名为“软件工程师学习笔记大全(C++,JAVA)4.rar”的压缩文件包含了软件工程师在学习C++和Java编程语言时的重要参考资料。这些文档详细涵盖了从基础到高级的各种主题,对于提升技能和准备面试非常有帮助。以下...

    达内培训的hibernate课程笔记

    【Hibernate.doc】 这个文件名表明笔记是以Microsoft Word文档(.doc)格式存储的,可能包含了关于Hibernate的详细讲解、示例代码和学习指南。文档可能涵盖了以下关键知识点: 1. **对象关系映射(ORM)原理**:...

    Mybatis学习笔记

    本学习笔记是作者在大学期间深入学习Mybatis后的整理,旨在帮助初学者快速入门并掌握其核心概念与功能。 笔记共分为11个章节,涵盖Mybatis的基础到高级应用,以下是主要知识点的详细讲解: 1. **Mybatis简介**:...

    spring 学习笔记 32页word

    【Spring 学习笔记概述】 Spring 是一个广泛使用的 Java 应用框架,尤其在企业级应用开发中占有重要地位。其核心特性是依赖注入(Dependency Injection,DI)和控制反转(Inversion of Control,IoC),这两者是...

    张龙圣思园struts2学习笔记word

    张龙圣思园的Struts2学习笔记,无疑为Java开发者提供了一份宝贵的参考资料,它可能涵盖了Struts2的基础概念、核心组件、配置方式以及实战技巧。 首先,让我们深入了解Struts2的核心特性。Struts2是MVC(Model-View-...

    韩顺平2011hibernate3.3视频教程ppt、笔记

    "笔记"可能是PDF或Word文档,包含了课程的重点内容和学习者的心得体会,而"PPT"可能包含课程的每堂课的主题、关键概念和示例代码,帮助学习者系统地掌握Hibernate的使用。 通过这个教程,学习者可以期待掌握以下...

    Hibernate-day01

    【压缩包子文件的文件名称列表】:“Hibernate第一天课堂笔记.docx”是一个Microsoft Word文档,很可能包含了该日课程的详细笔记,包括主要概念、关键点、例子和可能的练习。这些笔记通常会覆盖以下内容: 1. **...

    软件工程师学习笔记大全

    《软件工程师学习笔记大全》是一份综合性的学习资源,涵盖了软件开发中的多个核心技术和框架,主要针对C++和JAVA两大编程语言。这份资料是软件工程师提升技能、深入理解编程概念和框架应用的理想参考资料。 首先,...

    韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全).docx

    本资源是韩顺平 Java 从入门到精通视频教程的学习笔记,涵盖了 Java 基础知识、面向对象编程、图形界面开发、数据库编程、文件IO流编程、网络编程、多线程编程等方面的知识点。 Java 基础知识 * Java 开发平台标准...

    李兴华java word版全部笔记

    这个压缩包中的Word文档格式使得笔记易于阅读和编辑,对于学习者来说,可以方便地做笔记、添加注释或进行个性化整理。在学习过程中,结合实际编程练习,可以更好地理解和掌握Java编程技能,从而提升编程能力。

    方立勋JavaWeb视频前十一天笔记word

    【描述】"方立勋JavaWeb视频前十一天笔记word"描述的是根据方立勋的视频教程制作的学习笔记,以Word文档的形式记录下来,便于回顾和复习。这表明笔记内容可能包括了视频课程中的关键讲解,重点难点以及实践案例。 ...

    软件工程师学习笔记J2EE

    笔记可能涉及了ORM(对象关系映射)概念、配置文件、实体类的定义、Session和Transaction管理、HQL(Hibernate查询语言)以及一对多、多对一、一对一等关联映射的实现。 4. **Spring笔记.doc**: Spring框架是J2EE...

Global site tag (gtag.js) - Google Analytics