`

Hibernate事务隔离级别

阅读更多

Hibernate事务隔离级别:

隔离级别

脏读 (Dirty Read)

不可重复读 (NonRepeatable Read)

幻读 Phantom Read

读操作未提交 (Read uncommitted)

可能

可能

可能

读操作已提交 (Read commited)

不可能

可能

可能

可重复读 (Repeatable read)

不可能

不可能

可能

可串行化 Serializable

不可能

不可能

不可能

 

设置隔离级别:

<property name=”hibernate.connection.isolation”>4</property> //可填1,2,4(不可重复读),8

 

在以下的情况下,Hibernate会调用flush():

(1)    事务提交时,如果flush模式不为FlushMode.NEVER, commit()将调用flush().

(2)    在某些查询语句之前(此查询语句已经改变了数据库状态,所以需要调用flush()以同步数据,使查出来的数据是经过更改的)

(3)    当程序强制调用session.flush时。

在一个事务中调用一个select 查询,如果此查询之前已经有某个update语句做了数据修改(注意此update语句并没有真正执行),则首先会调用flush(),使update对数据库操作成功,接着才返回查询数据。

FlushMode有以下几种:

(1)       FlushMode.AUTO: 数据有更改,则在查询前更新此改动,以保证数据同步.

(2)       FlushMode.COMMIT:  在事务结束之前刷新session

(3)       FlushMode.NEVER: 仅在明确调用flush()时才对数据库进行同步.

 

Hibernate中使用JDBC事务:

Hibernate.transaction.factory_class=net.sf.hibernate.transaction.JDBCTransactionFactory

 

使用JTA 事务:

       在一个具有多个数据库的系统中,可能一个程序将会调用几个数据库中的数据,需要一种分布式事务,或者准备用JTA来管理跨Session的长事务,那么就需要使用JTATransaction.

 

Hibernate中对数据的锁定:

如果要在事务中使用悲观锁,则可以像下面这样写:

Transaction tx=session.beginTransaction();

//取得持久化User对象,并使用LockMode.UPGRADE模式锁定对象

User user=(User)session.get(User.class,LockMode.UPGRADE);

 user.setName(“newName”);  //更改对象属性,注意并不需要使用session.save(user)

tx.commit();

这样的话,Hibernate会使用select …… for update 语句载入User类,并且锁住了这个对象在数据库中的列,直到事务完成(commit()以后)

 

Hibernate 可以利用Query或者CriteriasetLockMode()方法来设定要锁定的表或列(Row)及其锁定模式。可设定的模式有两个:

(1)       LockMod.UPGRADE

(2)       LockMode.UPDGRADE_NOWAIT:

分享到:
评论
1 楼 eyesmore 2012-02-12  
当隔离级别设置为Repeatable read的时候,是不可能出现NonRepeatable Read并发问题的,也自然不会出现幻读 (Phantom Read),幻读 (Phantom Read)是不可重复读 NonRepeatable Read)的特殊情况,只不过一般的可重复读 NonRepeatable Read)是关于Update操作,而幻读 (Phantom Read)是关于Insert和Delete操作的。

相关推荐

    Hibernate 事物隔离级别 深入探究

    Hibernate 事物隔离级别 深入探究

    10分钟解决Hibernate的事务管理,Hibernate当中要设置事务的隔离级别

    (3)隔离性:代表的是一个事务执行的过程当中,不应该受到其他事务的干扰。 (4)持久性:代表一个事务执行完成后数据就持久到数据库当中(提交或回滚)。 3、如果我们不考虑事务的隔离性,就会引发一些安全性的...

    Spring控制Hibernate中的事务传播特性与隔离级别操作.docx

    Spring控制Hibernate中的事务传播特性与隔离级别操作,通过利用spring和Hibernate的两个HibernateTemplate 和 jdbcTemplate类,实现数据的交互。

    hibernate初学者笔记

    关于hibernate的Session,向数据插入时的事务隔离级别,持久化对象的状态,对应关系的映射文件,表与表之间的多种映射关系,以及hibernate的二级缓存的笔记。

    Hibernate的Session_flush与隔离级别代码详解

    主要介绍了Hibernate的Session_flush与隔离级别代码详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

    Spring 事务隔离与事务传播的详解与对比

    Spring 事务隔离与事务传播的详解与对比 Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作。今天一起学习一下Spring的事务管理。Spring的事务管理分为声明式跟编程式。声明式就是在Spring的配置文件中...

    Spring + Hibernate + Struts

    比如说hibernate,我问一个同学session接口的get和load方法有何异同,这位...另外一个说精通spring,很多流行的词语,什么aop啊,什么声明性事务管理等等,我就问他spring里面事务的传播属性和事务隔离级别是怎么回事

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     21.3 数据库的事务隔离级别  21.3.1 在mysql.exe程序中设置隔离级别  21.3.2 在应用程序中设置隔离级别  21.4 在应用程序中采用悲观锁  21.4.1 利用数据库系统的独占锁来实现悲观锁  21.4.2 由应用程序实现...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     21.3 数据库的事务隔离级别  21.3.1 在mysql.exe程序中设置隔离级别  21.3.2 在应用程序中设置隔离级别  21.4 在应用程序中采用悲观锁  21.4.1 利用数据库系统的独占锁来实现悲观锁  21.4.2 由应用程序实现...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     21.3 数据库的事务隔离级别  21.3.1 在mysql.exe程序中设置隔离级别  21.3.2 在应用程序中设置隔离级别  21.4 在应用程序中采用悲观锁  21.4.1 利用数据库系统的独占锁来实现悲观锁  21.4.2 由应用程序实现...

    Hibernate缓存管理

    doc格式。当多个并发的事务同时访问持久化层的缓存的相同数据时,会引起并发问题,必须采用必要的事务隔离措施。在进程范围或集群范围的缓存...因此可以设定四种类型的并发访问策略,每一种策略对应一种事务隔离级别。

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     21.3 数据库的事务隔离级别  21.3.1 在mysql.exe程序中设置隔离级别  21.3.2 在应用程序中设置隔离级别  21.4 在应用程序中采用悲观锁  21.4.1 利用数据库系统的独占锁来实现悲观锁  21.4.2 由应用程序实现...

    hibernate 框架的基础四

    HQL的多表检索 事务及隔离级别 HQL优化 抓取策略

    Java And 数据库事务

    事务,并发,隔离级别,JTA 事务,EJB,BMT,CMT,Spring,异常处理 异常处理还没有整理。 内容80%抄袭

    hibernate的flush()、refresh()、clear()针对一级缓存的操作的区别.docx

    首先session是有一级缓存的,目的是为了减少查询数据库的时间,提高效率,一级缓存的生命周期和session是一样的, session.flush()和session.clear...该方法的有效性需要配置事务的隔离级别为read commited(读已提交)。

    尚硅谷佟刚Spring4代码及PPT.rar

    JdbcDaoSupport、使用 NamedParameterJdbcTemplate、Spring 的声明式事务、事务的属性(传播行为、隔离级别、回滚属性、只读属性、过期时间)、使用 XML 文件的方式配置事务、整合 Hibernate、整合 Struts2 等。

    spring考试通过必备材料.docx

    事务的隔离级别设置为DEFALIT 26 在applicationContext.xml中配置文件通知 27 JDBC 28 Text测试类 29 Hibernate.cfg.xml 31 AOP方法的通知 31 单独前置通知 31 单独后置通知 32 单独环绕通知 32

    spring.doc

    5.1.8.3Spring事务的隔离级别 117 拓展: 118 5.1.8.4以XML配置的 形式 119 拓展: 120 5.1.8.5以注解方式配置 125 拓展: 127 5.1.9使用CGLIB以XML形式配置事务 130 5.2 Spring+Hibernate 131 5.2.1 ...

Global site tag (gtag.js) - Google Analytics