事务:事务就是逻辑上的一组操作,要么全都成功,要么全都失败!!!

事务特性
  原子性:事务一组操作不可分割.
  一致性:事务的执行前后,数据完整性要保持一致.
  隔离性:一个事务在执行的过程中不应该受到其他事务的干扰.
  持久性:一旦事务结束,数据就永久保存数据库.

如果不考虑事务的隔离性引发一些安全性问题:
  5大类问题:3类读问题 2类写问题.
    读问题:
      脏读 :一个事务读到另一个事务未提交数据.
      不可重复读 :一个事务读到另一个事务已经提交数据(update),导致查询结果不一致.
      虚读 :一个事务读到另一个事务已经提交的数据(insert),导致查询结果不一致

    避免三种读的问题(设置事务的隔离级别):
        未提交读:以上三种读问题 都有可能发生.
        已提交读:避免脏读,但是不可重复读和虚读有可能发生.
        重复读:避免脏读和不可重复读,但是虚读是有可能发生.
        串行的:可以避免以上三种读问题.

在Hibernate中设置事务的隔离级别
  在核心配置文件中

<!--
  1—Read uncommitted isolation
  2—Read committed isolation
  4—Repeatable read isolation
  8—Serializable isolation
-->
<property name="hibernate.connection.isolation">4</property>

写问题:丢失更新
  解决
    悲观锁:依赖于数据库机制,锁住当前数据,其它任何用户都不能读取或修改

@Test
/*
* 使用悲观锁解决丢失更新
*/
public void demo4(){
  Session session = HibernateUtils.openSession();
  Transaction tx = session.beginTransaction();
  // 使用悲观锁(排他锁),LockMode.UPGRADE:利用数据库的for update字句加锁
  Customer customer = (Customer) session.get(Customer.class, 3, LockMode.UPGRADE);
  customer.setAge(32);
  tx.commit();
  session.close();
}

    乐观锁:不作数据库层次上的锁定,为了维护正确的数据,乐观锁采用应用程序上的逻辑实现版本控制的方法(在数据库中加入一个VERSON栏记录,在读取数 据时连同版本号一同读取,并在更新数据时递增版本号,然后比对版本号与数据库中的版本号,如果大于数据库中的版本号则予以更新,否则就回报错误)

public class Customer {
  private Integer cid;
  private String cname;
  private Integer version;   public Integer getVersion() {
    return version;
  }
  public void setVersion(Integer version) {
    this.version = version;
  }
  public Integer getCid() {
    return cid;
  }
  public void setCid(Integer cid) {
    this.cid = cid;
  }
  public String getCname() {
    return cname;
  }
  public void setCname(String cname) {
    this.cname = cname;
  }
}
<hibernate-mapping >
  <class name="cn.yzu.vo.Customer" batch-size="2" table="customer" lazy="true">
    <id name="cid" column="cid">
      <generator class="native"/>
    </id>
    <version name="version"/>
    <property name="cname" column="cname" length="30"/>
  </class>
</hibernate-mapping>

线程绑定的session
  在Hibernate.cfg.xml中配置一个:<property name="hibernate.current_session_context_class">thread</property>
    使用SessionFactory中的getCurrentSession()方法
    底层就是ThreadLocal

  当前线程中的session不需要进行关闭,线程结束后自动关闭!!!

Hibernate的事务处理的更多相关文章

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

    关于在使用hibernate在提交事务时常遇到的异常: an assertion failure occured (this may indicate a bug in Hibernate, but ...

  2. 分析Hibernate的事务处理机制

    Hibernate是对JDBC的轻量级对象封装,Hibernate本身是不具备Transaction处理功能的,Hibernate的 Transaction实际上是底层的JDBC Transactio ...

  3. hibernate之事务处理

    四个方面:事务的性质,事物的隔离级别,hibernate配置事务的隔离级别,使用事务小案例 1. 事务的性质: 四种性质:原子性,一致性,隔离性,持久性. 原子性:原子,不可再分.一个操作不能分为更小 ...

  4. 【Hibernate】事务处理

    一.概述 一.概述 事务 事务就是逻辑上的一组操作,要么全都成功,要么全都失败!!! 事务特性 原子性:事务一组操作不可分割. 一致性:事务的执行前后,数据完整性要保持一致. 隔离性:一个事务在执行的 ...

  5. hibernate 事务处理

    Hibernate的事务处理:事务:* 事务就是逻辑上的一组操作,要么全都成功,要么全都失败!!! 事务特性:* 原子性:事务一组操作不可分割.* 一致性:事务的执行前后,数据完整性要保持一致.* 隔 ...

  6. 为什么hibernate需要事务?

    Hibernate是对JDBC的轻量级对象封装, Hibernate本身是不具备事务处理功能的,Hibernate事务实际上是底层的JDBC事务的封装,或者是JTA事务的封装. Hibernate的J ...

  7. Hibernate下的增删改查

    概述: 关系--对象映射的中间件,属于开源ORM框架,是我们业务逻辑层中的调用数据库的中间件 演变: jdbc---hibernater---mybatis hibernate和mybatis区别? ...

  8. [转载]Hibernate如何提升数据库查询的性能

    目录(?)[-] 数据库查询性能的提升也是涉及到开发中的各个阶段在开发中选用正确的查询方法无疑是最基础也最简单的 SQL语句的优化 使用正确的查询方法 使用正确的抓取策略 Hibernate的性能优化 ...

  9. hibernate批量更新和删除数据

    批量处理  不建议用Hibernate,它的insert效率实在不搞,不过最新版本的Hibernate似乎已经在批量处理的时候做过优化了,设置一些参数如batch_size,不过性能我没有测试过,听说 ...

随机推荐

  1. 【BZOJ-2669】局部极小值 状压DP + 容斥原理

    2669: [cqoi2012]局部极小值 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 561  Solved: 293[Submit][Status ...

  2. opencv 比较直方图方式 进行人脸检测对比

    完整opencv(emgucv)人脸.检测.采集.识别.匹配.对比 //成对几何直方图匹配               public static string MatchHist()         ...

  3. 【整理】Word OpenXML常用标签

    一.背景 最近在做关于Word内容自动标引,需要了解Word的底层结构,顺便梳理一下OpenXML的标签含义,方便后续开发,提高对OpenXML标签的查找效率,也是一个熟悉的过程. 二.内容 < ...

  4. 多光谱图像数据库, Multispectral images databses

    1. https://scien.stanford.edu/index.php/hyperspectral-image-data/ 2. http://www.cs.columbia.edu/CAVE ...

  5. [转] 64位windows下添加postgreSQL odbc数据源

    系统环境:windows7 64位 postgreSQL9.0(64bit)   ps:安装postgreSQL时确定安装了odbc驱动.   问题:点击“开始->控制面板->管理工具-& ...

  6. SessionState

    SqlServer方式:1.创建数据库的方法:C:\Windows\Microsoft.NET\Framework\v4.0.30319>aspnet_regsql -ssadd -sstype ...

  7. 大熊君大话NodeJS之------(Url,QueryString,Path)模块

    一,开篇分析 这篇文章把这三个模块拿来一起说,原因是它们各自的篇幅都不是很长,其次是它们之间存在着依赖关系,所以依次介绍并且实例分析.废话不多说了,请看下面文档: (1),"Url模块&qu ...

  8. 【转载】使用Pandas对数据进行筛选和排序

    使用Pandas对数据进行筛选和排序 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas对数据进行筛选和排序 目录: sort() 对单列数据进行排序 对多列数据进行排序 获取金额最小前10项 ...

  9. Linux文件查找命令 find 详解

    关于find命令 由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下.即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权 ...

  10. window下安装zookeeper

    本地zookeeper安装(win7)下载zookeeper-3.3.6.zip文件解压zookeeper-3.3.6.zip文件到d:盘在D:\zookeeper-3.3.6\conf下增添 zoo ...