`
rebecca
  • 浏览: 315325 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate学习笔记(z_3)

阅读更多

来源:wcily123的blog   (特此赞一下^^很受益)

 

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

     关联关系: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 属性值

描述

n one

保存、更新或删除当前对象时,忽略其他关联对象,默认属性值

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学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...

    Hibernate学习笔记_songjignhao_1

    在本篇 Hibernate 学习笔记中,我们将深入探讨多种关联关系的映射,以及相关概念。Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发者使用 Java 对象来操作数据库,简化了数据访问层的开发工作。 首先,...

    Hibernate学习笔记特别详细

    《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...

    Hibernate3.1_DOC_CN.chm

    Hibernate3.1_DOC_CN.chm

    hibernate学习笔记_北大青鸟课堂笔记全文

    【hibernate学习笔记_北大青鸟课堂笔记全文】 Hibernate是一个强大的对象关系映射(ORM)框架,它为Java开发者提供了便捷的数据持久化方案。在Java应用中,尤其是在企业级开发中,它扮演着至关重要的角色,使得我们...

    Hibernatetools_Reference_Guide

    3. **创建 Hibernate 映射文件**:通过插件可以直接在 Eclipse 中生成或编辑 Hibernate 映射文件。 4. **创建 Hibernate 配置文件**:提供向导来辅助创建 Hibernate 的配置文件,包括设置数据库连接信息等。 5. **...

    hibernate 学习笔记精要

    hibernate 学习笔记精要hibernate 学习笔记精要hibernate 学习笔记精要hibernate 学习笔记精要

    Hibernate3.2官方中文参考手册.pdf 和Hibernate3.1_DOC_CN.chm中文版

    此外,3.2版还增强了对EJB3的支持,提升了性能,并优化了查询语言HQL(Hibernate Query Language)和 Criteria 查询。HQL是Hibernate特有的面向对象的查询语言,类似于SQL,但操作的是对象而不是表格。Criteria查询...

    hibernate学习笔记

    在本篇《Hibernate学习笔记》中,我们将深入探讨Hibernate这一流行的Java对象关系映射(ORM)框架。Hibernate允许开发者以面向对象的方式处理数据库操作,极大地简化了数据存取的复杂性。以下是一些关键知识点: 1....

    hibernate_day02笔记

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

    DMS.rar_dms_hibernate_myeclipse hibernate_mysql hibernate_struts

    标题"DMS.rar_dms_hibernate_myeclipse hibernate_mysql hibernate_struts"表明这是一个与数据库管理系统(DMS)相关的项目,使用了Hibernate ORM框架,MyEclipse作为开发环境,并结合了MySQL数据库和Struts框架。...

    黑马程序员_hibernate框架开发2016版讲义和笔记资料_day02

    《黑马程序员_hibernate框架开发2016版讲义和笔记资料_day02》 本文将深入探讨2016年黑马程序员发布的Hibernate框架开发课程的第二天内容。Hibernate,一个强大的Java持久化框架,简化了数据库操作,为开发者提供了...

    Hibernate 学习笔记(全套)

    这套笔记是我学习Hibernate,进行相关技术点训练时记录下来的,其中包括技术点说明与相关事例,拿出来与大家分享。

    (jar包)struts-2.3.3____hibernate4.1.6____spring-3.1.2

    (jar包)struts-2.3.3____hibernate4.1.6____spring-3.1.2 (jar包)struts-2.3.3____hibernate4.1.6____spring-3.1.2

    hibernate_day03笔记

    hibernate_day03笔记

    hibernate_day4_hibernate_sick7s3_

    【标题】"hibernate_day4_hibernate_sick7s3_" 暗示这是一个关于Hibernate框架的学习资源,可能是第四天的学习内容,专注于"hibernate_sick7s3"这个特定主题。在这个主题下,可能涉及了更深入或者特别的使用场景或...

Global site tag (gtag.js) - Google Analytics