zoukankan      html  css  js  c++  java
  • (转)Hibernate事务管理

    http://blog.csdn.net/yerenyuan_pku/article/details/70650239

    事务介绍

    什么是事务?

    事务就是逻辑上的一组操作,组成这组操作的各个单元要么全部成功,要么全都失败。

    事务的四个特性

    • 原子性:不可分割的一个整体。
    • 一致性:事务在执行前后,要保证数据的一致。
    • 隔离性:一个事务在执行的过程中,不应该受到其它事务的干扰。
    • 持久性:事务一旦结束,数据就持久化到数据库中。

    不考虑事务的隔离性,会产生什么问题?

    不考虑事务的隔离性,会产生如下问题:

    • 脏读:一个事务读取到另一个事务的未提交数据。
    • 不可重复读:一个事务读取到另一个事务提交的数据(主要是指update操作),会导致两次读取的结果不一致。
    • 虚读(幻读):一个事务读取到另一个事务提交的数据(主要是指insert操作),会导致两次(也有可能是多次)读取结果不一致。

    对于上述问题如何解决?

    我们可以通过设置隔离级别来解决上述问题:

    • READ_UNCOMMITED:读取未提交,它引发所有的隔离问题。
    • READ_COMMITTED:读已提交,阻止脏读,可能发生不可重复读与虚读。
    • REPEATABLE_READ:重复读,阻止脏读、不可重复读,可能发生虚读。
    • SERIALIZABLE:串行化,解决所有问题,但不允许两个事务同时操作一个目标数据。(效率低下)

    常见数据库的默认级别:

    1. ORACLE默认的是事务隔离级别是READ_COMMITTED。
    2. MYSQL默认的事务隔离级别是REPEATABLE_READ。

    Hibernate中设置事务隔离级别

    Hibernate框架中可通过hibernate.connection.isolation来设置事务的隔离级别,它可取的值有1、2、4、8:

    • 1代表的事务隔离级别为READ UNCOMMITTED
    • 2代表的事务隔离级别为READ COMMITTED
    • 4代表的事务隔离级别为REPEATABLE READ
    • 8代表的事务隔离级别为SERIALIZABLE

    在Hibernate框架中设置事务的隔离级别,可在hibernate.cfg.xml核心配置文件中添加如下配置:

    <property name="hibernate.connection.isolation">4</property>
  • 相关阅读:
    在tableViewCell上添加button导致按钮没有点击效果和不能滑动
    jquery添加自定义校验
    json转化对特殊字段的处理
    模仿spring authentication-provider 自己写登录人管理
    hibernate自动建表
    java 上传文件
    java实现赋值excel模板,并在新文件中写入数据,并且下载
    实现图片预览
    ajax+jquery实现父页面弹出子页面,选择提交后给父页面传值
    上传附件,压缩并加密
  • 原文地址:https://www.cnblogs.com/telwanggs/p/6964045.html
Copyright © 2011-2022 走看看