一、 数据库事务概念
数据库事务的特征: 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> 可以管理并发。乐观琐比悲观琐有更好的并发性,优先考虑乐观琐。
分享到:
相关推荐
### Hibernate数据库事务详解 #### 一、概述 Hibernate 是一款流行的 ORM(对象关系映射)框架,它使得 Java 开发者能够更容易地操作数据库。在使用 Hibernate 进行数据库操作时,事务管理是非常重要的一部分。...
这简化了事务管理,尤其是在分布式系统中。 ### 5. Configuration 和 SessionFactory `Configuration` 类用于配置Hibernate,包括数据库连接信息、映射文件路径等。配置完成后,通过 `Configuration` 创建 `...
**hibernate数据库相关操作步骤** Hibernate是一款强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用中操作数据库的简便方法。通过使用Hibernate,开发人员可以避免直接编写SQL语句,而是通过面向...
本项目是关于如何使用Spring MVC与Hibernate结合来实现事务管理的实践教程,通过MyEclipse自动生成所需的包和配置文件。这里将详细讲解这一过程,以及涉及到的关键知识点。 首先,Spring MVC作为Spring框架的一部分...
总结起来,Spring和Hibernate的事务管理是企业级Java应用中的关键组件,它们提供了一种优雅的方式来处理复杂的数据库操作。理解并掌握其原理和配置,对于提升代码质量和系统稳定性具有重要意义。在阅读本文档...
标题"Hibernate数据库操作实例.zip"表明这是一个关于使用Hibernate框架进行数据库操作的实际案例。Hibernate是一个流行的Java对象关系映射(ORM)工具,它允许开发人员使用面向对象的方式来处理数据库交互,而无需...
2. **Hibernate事务**: Hibernate本身也提供了一种事务管理机制,但在Spring环境中,我们通常使用Spring的事务管理器来协调。当@Transactional注解应用于方法上,Spring会在该方法执行前后自动管理事务的开始和结束...
总结,Hibernate的事务管理是保证数据库操作正确性和一致性的关键,理解并熟练运用事务的四大特性及不同隔离级别,能有效预防并发问题,提高系统的稳定性和可靠性。在实际开发中,根据项目需求和性能考虑,合理选择...
深入研究Hibernate源码,我们可以看到它如何处理数据库连接的获取、释放以及事务管理。例如,Session是如何调用连接池获取连接,又如何在操作完成后返回连接到池中。这对于优化应用程序性能和理解框架内部机制至关...
6. **事务管理**:在需要的地方使用Hibernate的Transaction API进行事务控制,确保数据的一致性。 7. **日志配置**:根据项目需求配置SLF4J的日志输出,如设置日志级别、输出格式等。 8. **测试连接**:在代码中...
本实例将深入探讨如何结合Spring的注解声明式事务管理与Hibernate的数据访问技术,构建一个完整的事务处理系统。 Spring框架以其灵活的依赖注入(DI)和面向切面编程(AOP)闻名,它允许开发者将事务管理从业务逻辑...
Spring框架提供了一种声明式事务管理,可以简化事务处理,使得在Spring应用中使用Hibernate变得非常方便。以下是如何在Spring配置中集成Hibernate: 1. 配置数据源: 在Spring的配置文件中定义数据源,例如使用...
当开始一个事务(`beginTransaction`),Hibernate会开启一个数据库事务,允许你在多个操作之间保持数据的一致性。在所有操作完成后,调用`commit`方法将提交事务,此时,Hibernate会清除缓存并更新数据库。 接下来...
**Hibernate事务管理详解** 在Java开发中,尤其是在企业级应用中,事务管理是不可或缺的一部分。Hibernate作为一款流行的ORM(对象关系映射)框架,提供了强大的事务处理能力。本篇文章将深入探讨Hibernate中的事务...
本篇文章将深入探讨Spring与Hibernate整合下的事务管理,帮助开发者理解并掌握这一关键知识点。 首先,Spring框架提供了声明式事务管理,这是通过AOP(Aspect-Oriented Programming,面向切面编程)实现的。在...
它提供了强大的功能,如对象持久化、查询语言支持、事务管理等,大大简化了数据访问层的开发工作。 ### Hibernate支持的数据库方言 在Hibernate中,为了适应不同的数据库管理系统(DBMS),它引入了“方言”...
1. Session: Hibernate的核心接口,负责与数据库的交互,提供了事务管理、缓存管理以及持久化对象的创建、查询、更新和删除等操作。 2. Configuration:负责初始化Hibernate环境,加载配置文件,建立SessionFactory...