`

Hibernate的数据库事务管理

阅读更多

Hibernate的数据库事务管理

一、           数据库事务概念

数据库事务的特征: ACID

Atomic (原子性)、 Consistency (一致性)、 Isolation (隔离性)和 Durability (持久性)。 DBMS 用日志来保证数据的原子性、一致性和持久性;用锁的机制来保证数据的隔离性。

二、           事务的边界

数据库支持 2 种事务模式:自动提交和手动提交。

JDBC API 的事务边界

try
{
     Connection conn
= java.sql.DriverManager,.getConnection(dbUrl,dbUser,dbPwd);
     conn.setAutoCommit(
false ); // 设置成手动模式
     stmt = conn.createStatement();
     stmt.executeUpdate(
" . " ); // 数据库更新1
     stmt.executeUpdate( " . " ); // 数据库更新2
    
     conn.commit();
}

catch (Exception e)
{
     conn.rollback();
}

finally
{
     stmt.close();
     conn.close();
}

Hibernate API 声明事务边界

Session session = factory.openSession();
Transaction tx;
try
{
     tx
= session.beginTransaction(); // 开始事务
    
// 执行操作
     。。。。。
    
     tx.commit();
}

catch (Exception e)
{
    
if (tx != null )
    
{
         tx.rollback();
     }

}

finally
{
     session.close();
}

注:一个 session 可以对应多个事务,但是推荐的做法是一个 session 对应一个事务。

三、           

多事务的并发问题

当多个事务同时访问相同的数据的时候,程序如果没有采取适当的隔离措施,就会发生数据库的并发问题。常见的并发问题有:

第一类丢失更新:撤消事务的时候,把其他的事务已经提交的数据给覆盖了;

脏读;读了没有提交的数据;

虚读:一个事务读到另外一个事务已经提交的新插入的数据;

不可重复读:一个事务读到另外一个事务已经提交的更新的数据;

第二类丢失更新:一个事务覆盖另外一个事务已经提交的更新数据。
四、          

一般地,大型的 DBMS 都会自动的管理锁定机制,但是在对数据的安全性、完整性和一致性有特殊要求的地方,可以由事务本身来管理琐的机制。

有一点要关注的是:锁的粒度越大,隔离性越好,并发性越差。

按照锁的程度来分有:

共享锁:用读操作,非独占的,其他事务可以读,但是不能更新,并发性好;

独占锁:用与 insert update delete 等语句,其他事务不能读,也不能改,并发性差;

更新锁:执行 update 的时候,加锁。

死琐:多是事务分别锁定了一个资源,又请求锁定对方已经锁定的资源,就造成了请求环。

降低死锁的最好办法是使用短事务。

五、            数据库的事务隔离级别

数据库提供 4 种事务隔离级别:

Serializable :串行化;(隔离级别最高) 1

Repeatable Read :可重复读; 2

Read Commited :读已提交数据; 4

Read Uncommited :读未提交数据;(隔离级别最低) 8

Hiberate 中的隔离级别的设置

Hibernate 的配置文件中 hibernate.connection.isolation=2

六、            悲观锁和乐观琐

从应用程序的角度来看,锁分为悲观锁和乐观锁。

悲观锁:显示的为程序加锁,但是降低并发性。

Select ……. For update;

Hibernate 中的代码

Session.get(Account.class,net Long(1),LockMode.UPGRADE) // 程序采用悲观锁

乐观锁:依靠 DBMS 来管理锁,程序依靠版本控制来避免并发问题。

在对象 - 关系映射的文件中,用 <version> 或者 <timestamp> 可以管理并发。乐观琐比悲观琐有更好的并发性,优先考虑乐观琐。
分享到:
评论

相关推荐

    HibernateSpring数据库的事务HibernateSpring数据库的事务

    HibernateSHibernateSpring数据库的事务HibernateSpring数据库的事务HibernateSpring数据库的事务pring数据库的事务

    Hibernate数据库事务

    文档内容的来源与我的博客,如果文档中相关的内容有所格式错误,请参考我的博文专栏,还请见谅,文章讲解的主要技术是Hibernate相关。如有差错还望海涵!

    spring mvc+hibernate 实现事务管理(全注解版)

    spring mvc hibernate 实现事务管理 jar包管理用maven,启动服务器用jetty,里边还有memcached数据库,但是本例子没有用到。

    spring mvc+hibernate实现事务管理(配置文件版)

    spring mvc hibernate整合,采用MyEclipse自动生成包和配置文件,jar包可能有多余,但是不影响整体效果。服务器tomcat。数据库mysql。

    Could not roll back Hibernate transaction.doc

    Hibernate是一个流行的Java持久层框架,它提供了对数据库的操作和事务管理机制。然而,在使用Hibernate时,可能会遇到事务回滚失败的问题,本文将详细介绍该问题的原因和解决方法。 一、问题描述 在使用Hibernate...

    hibernate操作数据库笔记

    使用Hibernate的Session对象操作数据库 1.初始化Hibernate:在要使用Hibernate的类的方法中实例化Configuration对象并用Configuration对象的configure()方法将hibernate.cfg.xml中的配置加载到内存,即: ...

    数据库事务、hibernate悲观锁和乐观锁

    NULL 博文链接:https://cdxs2.iteye.com/blog/1938245

    关于hibernate的查询,事务概念,复杂表的关系

    如果你正在学hibernate框架,我认为这份文档对你会有很大的关系。 如果你真的需要可以下载啊,积分又不是很多是吧,关键能学到知识就行了

    Java And 数据库事务

    事务,并发,隔离级别,JTA 事务,EJB,BMT,CMT,Spring,异常处理 异常处理还没有整理。 内容80%抄袭

    spring3.0两种事务管理配置

    Spring 3.0 提供了两种事务管理配置方法:基于 XML 的事务管理和基于 @Transactional 的事务管理,这两种方法都是为了实现事务管理的目标,分别具有不同的配置方式和优缺点。 基于 XML 的事务管理 这种方法不需要...

    声明式事务控制spring+hibernate集成

    声明式事务控制,spring2.5+hibernate3集成源码,附带有数据库脚本,可以直接导入到项目的工作空间。欢迎下载

    Hibernate 事物隔离级别 深入探究

    在 Hibernate 中,事务隔离级别是指数据库系统提供的一种机制,以解决并发事务带来的问题。为了确保数据库的可靠性和一致性,Hibernate 提供了四种事务隔离级别,分别是 Serializable、Repeatable Read、Read ...

    hibernate事务源码

    和关系数据库的中间件,这是对JDBC的封装,主要负 责 java 对象的持久化. (2)Hibernate是自动根据xml配置完成对象映射关系, 并根据提供的API完成持久化处理。 (3)是项目开发中后台实现的重要部分。

    webwork hibernate spring 实现留言板,远程登录

    用到知识是webwork做表现层 spring的事务层,IOC AOP hibernate 数据库的映射 Model view control传说中的三层+service 数据库是sqlserver 2005 更重要的是提供所有的.jar框架包

    10分钟解决Hibernate的事务管理,Hibernate当中要设置事务的隔离级别

    (4)持久性:代表一个事务执行完成后数据就持久到数据库当中(提交或回滚)。 3、如果我们不考虑事务的隔离性,就会引发一些安全性的问题 (一)读的问题 (1)脏读:一个事务读到另外一个事务未提交的数据 (2)不...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    11.2. 数据库事务声明 11.2.1. 非托管环境 11.2.2. 使用JTA 11.2.3. 异常处理 11.2.4. 事务超时 11.3. 乐观并发控制(Optimistic concurrency control) 11.3.1. 应用程序级别的版本检查(Application version ...

    Hibernate part 14:查询及数据库并发事务

    NULL 博文链接:https://mvplee.iteye.com/blog/2239488

    Hibernate Web应用的开发步骤

    Hibernate Web应用的开发一般经过以下几个步骤: (1)创建数据库。 (2)将Hibernate所需的JAR包复制到WEB-...(8)通过创建的Transaction实例进行事务管理。 (9)通过创建的Query或Criteria实例实现数据库的查询。

Global site tag (gtag.js) - Google Analytics