`
kewb
  • 浏览: 85825 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
社区版块
存档分类
最新评论

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> 可以管理并发。乐观琐比悲观琐有更好的并发性,优先考虑乐观琐。  

http://www.blogjava.net/sodmewuhan/archive/2006/04/22/42505.html


KE 2007-09-16 14:50 发表评论
分享到:
评论

相关推荐

    Hibernate数据库事务

    ### Hibernate数据库事务详解 #### 一、概述 Hibernate 是一款流行的 ORM(对象关系映射)框架,它使得 Java 开发者能够更容易地操作数据库。在使用 Hibernate 进行数据库操作时,事务管理是非常重要的一部分。...

    hibernate数据库访问接口设计

    这简化了事务管理,尤其是在分布式系统中。 ### 5. Configuration 和 SessionFactory `Configuration` 类用于配置Hibernate,包括数据库连接信息、映射文件路径等。配置完成后,通过 `Configuration` 创建 `...

    hibernate数据库相关操作步骤

    **hibernate数据库相关操作步骤** Hibernate是一款强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用中操作数据库的简便方法。通过使用Hibernate,开发人员可以避免直接编写SQL语句,而是通过面向...

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

    本项目是关于如何使用Spring MVC与Hibernate结合来实现事务管理的实践教程,通过MyEclipse自动生成所需的包和配置文件。这里将详细讲解这一过程,以及涉及到的关键知识点。 首先,Spring MVC作为Spring框架的一部分...

    spring hibernate 事务管理学习笔记(二)

    总结起来,Spring和Hibernate的事务管理是企业级Java应用中的关键组件,它们提供了一种优雅的方式来处理复杂的数据库操作。理解并掌握其原理和配置,对于提升代码质量和系统稳定性具有重要意义。在阅读本文档...

    Hibernate数据库操作实例.zip

    标题"Hibernate数据库操作实例.zip"表明这是一个关于使用Hibernate框架进行数据库操作的实际案例。Hibernate是一个流行的Java对象关系映射(ORM)工具,它允许开发人员使用面向对象的方式来处理数据库交互,而无需...

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

    2. **Hibernate事务**: Hibernate本身也提供了一种事务管理机制,但在Spring环境中,我们通常使用Spring的事务管理器来协调。当@Transactional注解应用于方法上,Spring会在该方法执行前后自动管理事务的开始和结束...

    Hibernate的事务管理.doc

    总结,Hibernate的事务管理是保证数据库操作正确性和一致性的关键,理解并熟练运用事务的四大特性及不同隔离级别,能有效预防并发问题,提高系统的稳定性和可靠性。在实际开发中,根据项目需求和性能考虑,合理选择...

    hibernate数据库连接

    深入研究Hibernate源码,我们可以看到它如何处理数据库连接的获取、释放以及事务管理。例如,Session是如何调用连接池获取连接,又如何在操作完成后返回连接到池中。这对于优化应用程序性能和理解框架内部机制至关...

    hibernate连接金仓数据库所需jar包集合lib.7z

    6. **事务管理**:在需要的地方使用Hibernate的Transaction API进行事务控制,确保数据的一致性。 7. **日志配置**:根据项目需求配置SLF4J的日志输出,如设置日志级别、输出格式等。 8. **测试连接**:在代码中...

    Spring+Hibernate注解事务实例

    本实例将深入探讨如何结合Spring的注解声明式事务管理与Hibernate的数据访问技术,构建一个完整的事务处理系统。 Spring框架以其灵活的依赖注入(DI)和面向切面编程(AOP)闻名,它允许开发者将事务管理从业务逻辑...

    hibernate 数据库操作方法

    Spring框架提供了一种声明式事务管理,可以简化事务处理,使得在Spring应用中使用Hibernate变得非常方便。以下是如何在Spring配置中集成Hibernate: 1. 配置数据源: 在Spring的配置文件中定义数据源,例如使用...

    Hibernate的事务处理机制和flush方法的用法.docx

    当开始一个事务(`beginTransaction`),Hibernate会开启一个数据库事务,允许你在多个操作之间保持数据的一致性。在所有操作完成后,调用`commit`方法将提交事务,此时,Hibernate会清除缓存并更新数据库。 接下来...

    Hibernate事务(源码)

    **Hibernate事务管理详解** 在Java开发中,尤其是在企业级应用中,事务管理是不可或缺的一部分。Hibernate作为一款流行的ORM(对象关系映射)框架,提供了强大的事务处理能力。本篇文章将深入探讨Hibernate中的事务...

    Spring Hibernate 事务处理 详细说明

    本篇文章将深入探讨Spring与Hibernate整合下的事务管理,帮助开发者理解并掌握这一关键知识点。 首先,Spring框架提供了声明式事务管理,这是通过AOP(Aspect-Oriented Programming,面向切面编程)实现的。在...

    hibernate中所有数据库方言

    它提供了强大的功能,如对象持久化、查询语言支持、事务管理等,大大简化了数据访问层的开发工作。 ### Hibernate支持的数据库方言 在Hibernate中,为了适应不同的数据库管理系统(DBMS),它引入了“方言”...

    java使用hibernate操作数据库jar

    1. Session: Hibernate的核心接口,负责与数据库的交互,提供了事务管理、缓存管理以及持久化对象的创建、查询、更新和删除等操作。 2. Configuration:负责初始化Hibernate环境,加载配置文件,建立SessionFactory...

Global site tag (gtag.js) - Google Analytics