如何使用Hibernate来管理事务

在数据库应用程序中最基本的操作是CRUD(创建/读取/更新/删除),这4个操作构成了数据库应用程序的基石。在单机时代,一个数据库只由一个应用程序使用,这样CRUD操作并不会带来什么负面影响,但当进入网络时代后,这一切都发生了改变。由于网络数据库程序一般是由多个客户端同时操作一个数据库,因此,传统的CRUD操作将变得不再安全。因此,这个问题将引出本文的中心内容:事务。通过事务可以使传统的CRUD操作适应网络数据库应用。

本文分为三个部分。第一部分讨论了Hibernate如何管理事务和会话。第二部分描述了Hibernate用于管理事务和会话的核心API。在第三部分将举一个如何应用会话和事务的例子,并讨论了ThreadLocal变量。

Hibernate中的会话和事务

所谓会话,就是一个客户端从登录服务器开始,到登出服务器为止,在这期间关于客户端和服务器之间的所有活动。一个会话中可包含一个或多个事务,每一个事务是一原子操作,这个原子操作中可以包含多个操作,但这些操作是一个整体,要么都成功,要么都失败。在讨论Hibernate的会话和事务之前,让我们先来了解一下事务在底层是如何工作的。在Java中的操作数据库一般是和JDBC直接打交道,而JDBC则是直接通过Socket和数据库打交道。我们所说的底层实际上就是指JDBC和数据库层。

首先,让我们来看看数据库事务。数据库的操作由很多CRUD操作集合组成。而每一个集合就是数据库的一个事务。一个事务由begin transaction开始,最后以commit或rollback结束,这两个事务结束语保证了这一组CRUD操作要么都成功执行,要么回到执行前的状态。换句话说,这一组CRUD操作只要有一条语句执行失败,整个组都将回滚。这么做是为了保证数据的完整性。

如果事务中只有一个操作,那么事务是否提交,只依赖于这个操作的成功或失败。如一条INSERT语句,只有在这条语句成功执行后,数据才被真正写到数据库中。

现在让我们来看看事务中包含多条CRUD语句的情况,如包含一条UPDATE语句和二条DELETE语句。在这种情况下,不管这三条语句哪一条执行失败,整个事务都将回滚。

在使用事务时为了不产生负面影响,常常要对事务进行划分,即将一个大的事务合理划分成一些小的事务。这样如果某一个事务回滚的话,就不用回滚所有操作了。至于将大事务划分成多少个小的事务,这就要根据具体的情况而定。

时间: 2024-12-06 09:32:32

如何使用Hibernate来管理事务的相关文章

事务管理-hibernate和mybatis事务问题

问题描述 hibernate和mybatis事务问题 我想在web应用中使用hibernate和mybatis配合做数据持久化,但是遇到数据源和 事务的问题.首先hibernate是使用的proxool连接池,在自己写的hibernate工具 类中加载hibernate的sessionFactory以及session的打开和事务管理等.那么问题 来了,我在mybatis中该如何配置来使用连接池,以及和hibernate使用同一个事务. 请大神支招. 解决方案 spring集成mybatis事务问

spring3+hibernate4中使用spring管理事务,事务不自动提交问题

问题描述 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/

权衡Apache Geronimo EJB事务选项,第1部分: 容器管理事务

本系列分为三部分,将探索 Apache Geronimo 中的 Enterprise JavaBeans (EJB) 容器管理事务和 bean 管理事务.在第 1 部分中,将找出两种事务之间的差异,其中包括了解容器管理事务如何帮助您避免事务逻辑和管理的复杂性,从而使您可以专注于企业 bean 的业务逻辑.您还将学会如何在 Geronimo 应用服务器中实现容器管理事务,以及如何使用 Geronimo.OpenEJB 和 XDoclet 将自己从繁重的 EJB 编码工作中解放出来. 简介 Open

SQL server 管理事务和数据库介绍_mssql2005

用SQL server 处理数据库,主要就是和数据库还有处理数据库的事务打交道,如何管理好数据库这个对象和处理数据库的事务过程,是我们运用好SQL server非常关键的一点,下边是我对管理事务和数据库这章的总结.

创建事务性脚本 (用mts管理事务、组件)

创建|脚本 商业应用程序常常需要具有在事务内部运行脚本和组件的能力.事务是一种服务器操作,即使该操作包括很多步骤(例如,定货.查看存货.付帐等),也只能整体返回操作是成功还是失败.用户可以创建在事务内部运行的 ASP 脚本,如果脚本的任何一部分失败,整个事务都将会终止. ASP 事务处理是以 Microsoft Transaction Server (MTS) 为基础的.Microsoft Transaction Server (MTS) 是一个事务处理系统,用于开发.配置和管理高性能.可分级的

权衡Apache Geronimo EJB事务选项,第2部分: Bean管理事务

既然您已经在 第 1 部分 学习了有关 Enterprise JavaBeans (EJB) 容器管理的事务的所有细节,那么您可能对 EJB bean 管理的事务以及如何在 Apache Geronimo 应用服务器中实现它感到好奇.在由三部分组成的 系列文章 的这一期文章(第 2 部分)中,您可以获得所有细节. 简介 本系列分为三部分,将探索 Geronimo 和 OpenEJB 可以为您提供什么帮助,以及在 EJB 2.1 中现在可以实现的 EJB 事务概念(让您顺利进入 EJB 3.0).

spring + hibernate全注解事务问题(牛人赐教)

问题描述 spring.xml<beanid="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><propertyname="dataSource"><refbean="dataSource"/></property><prop

纯 hibernate hibernate.cfg.xml 事务 数据库操作 CRUD

import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class test1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Student s = new Students;

【hibernate框架】事务并发处理

事务并发处理: a)事务:ACID(事务的四个特性)    i.Atomic(原子性).Consistency(一致性).Itegrity(独立性).Durability(持久性) A:要么全部执行,要么不执行. C:事务的运行不该变数据库中数据的一致性. I:两个以上的事务不会出现交错执行的状态. D:事务运行以后,系统的更新是永久的,不会无缘无故的回滚. b)事务并发时可能出现的问题(参考孙卫琴的表) 1.第一类丢失更新(Lost Update) 2.脏读(duty read) 3.不可重复