【Hibernate】事务处理

  • 一、概述

一、概述

  • 事务
  • 事务就是逻辑上的一组操作,要么全都成功,要么全都失败!!!
  • 事务特性
    • 原子性:事务一组操作不可分割.
    • 一致性:事务的执行前后,数据完整性要保持一致.
    • 隔离性:一个事务在执行的过程中不应该受到其他事务的干扰.
    • 持久性:一旦事务结束,数据就永久保存数据库.
  • 如果不考虑事务的隔离性引发一些安全性问题:
  • 5大类问题:3类读问题 2类写问题.
  • 读问题:
    • 脏读: 一个事务读到另一个事务未提交数据.
    • 不可重复读: 一个事务读到另一个事务已经提交数据(update),导致查询结果不一致.
    • 虚读: 一个事务读到另一个事务已经提交的数据(insert),导致查询结果不一致
  • 避免三种读的问题:
    • 设置事务的隔离级别:

      • 未提交读:以上三种读问题 都有可能发生.
      • 已提交读:避免脏读,但是不可重复读和虚读有可能发生.
      • 重复读:避免脏读和不可重复读,但是虚读是有可能发生.
      • 串行的:可以避免以上三种读问题.
  • 在Hibernate中设置事务的隔离级别:
    • 在核心配置文件中:
    • 4
  • 写问题:丢失更新
    • 解决

      • 悲观锁:
      • 乐观锁;
  • 线程绑定的session:
    • 在Hibernate.cfg.xml中配置一个:
      thread
    • 使用SessionFactory中的getCurrentSession();方法.
    • 底层就是ThreadLocal.
  • 当前线程中的session不需要进行关闭,线程结束后自动关闭!!!

原文地址:https://www.cnblogs.com/haoworld/p/hibernate-shi-wu-chu-li.html

时间: 2024-11-13 06:41:27

【Hibernate】事务处理的相关文章

Hibernate批量处理海量数据的方法

本文实例讲述了Hibernate批量处理海量数据的方法.分享给大家供大家参考,具体如下: Hibernate批量处理海量其实从性能上考虑,它是很不可取的,浪费了很大的内存.从它的机制上讲,Hibernate它是先把符合条件的数据查出来,放到内存当中,然后再进行操作.实际使用下来性能非常不理想,在笔者的实际使用中采用下面的第三种优化方案的数据是:100000条数据插入数据库, 需要约30分钟,呵呵,晕倒.(本人10分钟插入1000000条数据(字段比较小)) 总结下来有三种来处理以解决性能问题:

atitit.spring hibernate的事务机制 spring不能保存对象的解决

atitit.spring hibernate的事务机制 spring不能保存对象的解决 sessionFactory.openSession() 不能. . log黑头马sql语言.. sessionFactory.getCurrentSession().update(user); 中间走ok兰..log黑头也有累.. 在Spring中使用Hibernate.假设我们配置了TransactionManager.那么我们就不应该调用SessionFactory的openSession()来获得S

剖析错误原理并解决Hibernate出现No TransactionManagerLookup specified!错误

一.No TransactionManagerLookup specified!大致意思就是:没有指定的事务管理查找器! 二.这就让我们对hibernate事务处理有点兴趣! (1)hibernate是对JDBC的轻量级对象封装,Hibernate本身是不具备Transaction处理功能的,Hibernate的Transaction实际上是底层的JDBC Transaction的封装(本地事务:简单的说数据库只有一个),或者是JTA Transaction的封装(全部事务:简单的说数据库有多个

spring配置事务

一.配置JDBC事务处理机制 <!-- 配置Hibernate事务处理 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory">&l

源代码解读Spring只读事务与读写事务的性能的差别

前言:  如果大家使用过Spring事务管理,会发现Spring提供的事务分为"只读"和"读写"事务两类.这不免就会疑问这两种事务会有什么不同?本文则通过对Spring和Hibernate源代码的剖析来找出这两种事务的区别.特别是运行性能方面的区别.  解读的源代码版本为 Spring 2.5.6.SEC01 ,Hibernate 3.3.2.GA. Spring对事务的支持也分编程式和声明式,本文以基于Annotation方式的声明式事务为例:    Spring

Java事务处理全解析(八)——分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)

在本系列先前的文章中,我们主要讲解了JDBC对本地事务的处理,本篇文章将讲到一个分布式事务的例子. 请通过以下方式下载github源代码: git clone https://github.com/davenkin/jta-atomikos-hibernate-activemq.git 本地事务和分布式事务的区别在于:本地事务只用于处理单一数据源事务(比如单个数据库),分布式事务可以处理多种异构的数据源,比如某个业务操作中同时包含了JDBC和JMS或者某个操作需要访问多个不同的数据库. Java

分析Hibernate的事务处理机制

Hibernate是对JDBC的轻量级对象封装,Hibernate本身是不具备Transaction处理功能的,Hibernate的 Transaction实际上是底层的JDBC Transaction的封装,或者是JTA Transaction的封装,下面我们详细的分析: Hibernate可以配置为JDBCTransaction或者是JTATransaction,这取决于你在hibernate.properties中的配置: #hibernate.transaction.factory_cl

Hibernate的事务处理

事务:事务就是逻辑上的一组操作,要么全都成功,要么全都失败!!! 事务特性 原子性:事务一组操作不可分割. 一致性:事务的执行前后,数据完整性要保持一致. 隔离性:一个事务在执行的过程中不应该受到其他事务的干扰. 持久性:一旦事务结束,数据就永久保存数据库. 如果不考虑事务的隔离性引发一些安全性问题: 5大类问题:3类读问题 2类写问题. 读问题: 脏读 :一个事务读到另一个事务未提交数据. 不可重复读 :一个事务读到另一个事务已经提交数据(update),导致查询结果不一致. 虚读 :一个事务

hibernate并发时的事务处理

两个方法 方法一: public void saveTest() { try { System.out.println("saveTest start"); User user = entityDao.get(User.class, 1L);// User user = entityDao.getTemplate().get(User.class, 1L, LockMode.READ); System.out.println("saveTest " + user.g

hibernate之事务处理

四个方面:事务的性质,事物的隔离级别,hibernate配置事务的隔离级别,使用事务小案例 1. 事务的性质: 四种性质:原子性,一致性,隔离性,持久性. 原子性:原子,不可再分.一个操作不能分为更小的操作.要不全部执行,要不全不执行. 一致性:事务在完成时,必须使得所有的数据保持一致的状态.(ps:数据状态重点,与开始事务前一样的状态) 隔离性(并发才考虑):事务查看数据时数据所处在的状态,要么是另一个并发事务修改它之前的状态,要么是另一个并发事务修改它之后的状态,事务不会查看中间状态的数据