`
chandler
  • 浏览: 81899 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate学习笔记(六)

阅读更多

    事务
      其实Hibernate中的事物的原型还是数据库基本类似。没有什么比较特别的地方,至少我第一次学习觉得没有什么特别的地方。
    
    Hibernate中的几个异常及常用处理办法
           HibernateException,是个一般的错误。必须通过检查异常信息,或者通过getCause方法找出更多原因
           JdbcException 是被Hibernate的内部JDBC层抛出的任何异常,这种异常总是又一个特定的SQL语句产生,可以用getSql()获得引起麻烦的语句。JDBC连接(实际上是JDBC驱动器)抛出的内部异常可以通过getSQLException()或者getCause()获得,并且通过getErrorCode()可以得到特定特定于数据库和特定于供应商的错误代码。
           Hibernate包括JDBCException的子类型和一个内部转换器,改转换器视图吧数据库驱动抛出器的特定于供应商的错误代码变成一些更有意义的东西,内建的转换器可以给Hibernate支持的最重要的数据库方言生成JDBCConnectionException,SQLGrammarException,LockAquistionException,DataException和ConstraintViolationException。可以对数据库操作或者增强方言,或者插入SQLExceptionConverterFactory定制这种变换。
           其他RuntimeException.       

    四种数据更新的错误和隔离级别
         第一种,丢失更新,其定义是两个事务更新同一行,然后第二个事务失败,那么第一个事务的更新就会失效。说句实话,我觉得很拗口,同时也很难理解。因为觉得,除非在极度特殊的情况下,真的很难出现这种情况。因为谁都知道,事务和事务之间,本能的会吧这些分开。
         第二种,脏读取。不过觉得书中的解释可能不是很容易理解,书中说的是读取了另一个事务还没有提交的改变。其实我的理解就是读取了变化了之前的数据。
         第三种,不可重复读。这个就是如果读两次,那么两次就有可能不一样。
         最后一种,幻读。两次返回的不同的数据行。
         就好像书中说的那样。丢失更新和脏读取可能要避免,但是后两种其实是相对来说不是那种必须克服的错误。
        与其相对应的数据库隔离级别是未提交读,提交读,可重复读和序列化读。这些都是概念性很强的东西,如果看得明白最好,看不明白建议反复的读。
        修订隔离级别,在Hibernate中,为hibernate.connection.isolation这个属性。

   乐观锁及其并发控制
       乐观锁是乐观的认为很少会发生并发控制等问题。所以其解决的也很简单,就是用一个版本控制来控制冲突。至于版本控制,可以通过加入<version>或者<timestamp>标签来实现。

   悲观锁
       首先想要写一下Hibernate中的锁模式
       LockMode.None--别到数据库中去,除非对象不处于任何高速缓存中。
       LockMode.Read--绕过所有高速缓存,并执行版本检查,来验证内存中的对象是否与当前数据库中存在的版本相同,相当于共享锁
       LockMode.UpGrade--绕过所有高速缓存,做一个版本检查,如果支持的话,就获得数据库级别的悲观升级锁,如果数据库不支持select ....for update选项,退回到Lockmode.Read,其解决了不可重复读的问题。
       LockMode.UPGRAGE_NOWAIT——与前面一个相同。就是多个不要等的功能,如果数据库不支持,那么久退回到前面一个。
       LockMode.force--在数据库中强制增加对象的版本。实际上估计和乐观锁有关吧。
       LockMode.WRITE--内部使用。
        
       其实我的理解是这样的。尽管这些操作完成了锁的目的。但是在实际实现,还是和Hibernate的缓存有关。尽管借用了一些数据库中的操作,但是就是操作中涉及,持久化对象,缓存中的对象和数据库中对象的比较,具体的说,就是谁和谁比。然后根据这个比的结果,再处理锁和更新。

0
0
分享到:
评论

相关推荐

    Hibernate学习笔记整理

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

    Hibernate学习笔记特别详细

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

    hibernate 学习笔记精要

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

    hibernate学习笔记

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

    Hibernate 学习笔记(全套)

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

    Java相关课程系列笔记之十四Hibernate学习笔记

    【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...

    hibernate学习笔记mashibing

    《Hibernate学习笔记——马士兵教程解析》 在Java开发领域,ORM(Object-Relational Mapping)框架的使用已经非常普遍,其中Hibernate作为一款优秀的ORM框架,因其强大的功能和易用性深受开发者喜爱。本文将根据马...

    Hibernate学习笔记与总结

    **Hibernate学习笔记与总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。本文将深入探讨Hibernate的核心概念、配置、实体类、映射文件、...

    马士兵hibernate学习笔记(原版)

    ### 马士兵Hibernate学习笔记知识点总结 #### 一、课程内容概览 - **HelloWorld**:通过简单的示例程序介绍如何启动一个基于Hibernate的Java项目。 - **Hibernate原理模拟**:解释O/R Mapping的概念及其重要性。 -...

    Hibernate学习笔记和资料

    hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),hibernate中的对象状态以及刷新能缓存机制 ...

    传智播客 汤阳光 Hibernate 学习笔记

    传智播客 汤阳光 Hibernate 学习笔记,非常详细的hibernate学习资料!

    hibernate学习笔记文档

    ### Hibernate 学习笔记知识点概览 #### 一、Hibernate 概述 - **定义**:Hibernate 是一款开源的对象关系映射(ORM)框架,它实现了将 Java 应用程序中的对象模型映射到关系型数据库中的记录。通过 ORM 技术,...

    hibernate API帮助文档 及hibernate学习笔记

    Hibernate是一款强大的Java持久...通过阅读这份“Hibernate API帮助文档”和“Hibernate学习笔记”,你将能够深入理解Hibernate的工作原理,掌握其API的使用,并能在实际项目中有效地利用Hibernate进行数据持久化操作。

    hibernate学习笔记第二天的源码

    在深入探讨Hibernate学习笔记第二天的源码之前,我们先来理解一下Hibernate的核心概念。Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者将数据库操作转化为对象模型,大大简化了数据访问层的开发...

    马士兵hibernate学习笔记

    ### 马士兵Hibernate学习笔记知识点总结 #### 一、HelloWorld示例 - **目的**:通过简单的示例理解Hibernate的基本使用流程。 - **步骤**: - 创建Java项目`hibernate_0100_HelloWorld`。 - 建立库依赖,包括...

    hibernate学习笔记第四天的源码

    **hibernate学习笔记第四天源码解析** 在hibernate学习的过程中,第四天通常会深入探讨实体类、映射文件、配置文件以及查询语言等方面的内容。这些是hibernate框架的基础,也是开发者掌握持久化操作的关键。让我们...

Global site tag (gtag.js) - Google Analytics