`

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 事务隔离级别 深入探究 在 Hibernate 中,事务隔离级别是指数据库系统提供的一种机制,以解决并发事务带来的问题。为了确保数据库的可靠性和一致性,Hibernate 提供了四种事务隔离级别,分别是 ...

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

    本文主要关注于使用Hibernate进行事务管理和设置事务隔离级别的知识。Hibernate是一个流行的Java ORM(对象关系映射)框架,它简化了数据库操作,同时也提供了对事务的管理。 首先,我们需要理解事务的基本概念。...

    hibernate 对事务并发处理

    在 Hibernate 中,可以通过设置 hibernate.connection.isolation 属性来指定事务隔离级别。 例如: ```xml &lt;property name="hibernate.connection.isolation"&gt;2 ``` 这将设置事务隔离级别为 READ_COMMITTED。 解决...

    详解Hibernate事务处理机制

    Hibernate还允许开发者通过配置设置不同的事务隔离级别,以满足不同应用场景下的需求。常见的隔离级别包括: - `READ_UNCOMMITTED` - `READ_COMMITTED` - `REPEATABLE_READ` - `SERIALIZABLE` 这些级别的选择取决...

    Hibernate事务(源码)

    根据数据库系统的不同,Hibernate支持四种事务隔离级别:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。不同的隔离级别会带来不同的并发控制效果,开发者需要根据实际需求选择合适的级别。 ##...

    Spring Hibernate 事务处理 详细说明

    - 注解驱动:使用`@Transactional`注解直接在服务层的方法上,指定事务属性,如传播行为、隔离级别、超时和是否只读。 2. **传播行为:**决定了事务如何在不同的调用之间传播。例如,`PROPAGATION_REQUIRED`是最...

    Hibernate 事务和并发控制

    例如,对于读多写少的场景,乐观锁和较高的事务隔离级别(如Repeatable Read)可能是更好的选择。而对于写操作频繁的情况,悲观锁和更低的隔离级别可能更合适。 总的来说,理解并熟练掌握Hibernate的事务和并发控制...

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

    在Spring框架中,为了管理和控制Hibernate事务,Spring提供了两种关键工具:HibernateTemplate和JdbcTemplate。这两个模板类简化了与数据库的交互,同时也处理了事务管理。让我们深入了解一下这两个类以及它们如何...

    hibernate事务,并发及缓存管理实例

    Hibernate提供了四种事务隔离级别:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。开发者可以根据应用场景选择合适的隔离级别。此外,...

    spring hibernate 事务管理学习笔记(二)

    这个注解可以应用在类或方法级别,用于指定事务的传播行为、隔离级别、超时限制以及是否回滚默认异常。例如: ```java @Service @Transactional(isolation = Isolation.REPEATABLE_READ) public class UserService ...

    在Spring中配置Hibernate事务

    在需要进行事务处理的业务层方法上添加@Transactional注解,指定事务属性如传播行为、隔离级别、读写模式等。例如: ```java @Service public class UserService { @Transactional public void addUser(User ...

    spring hibernate 事务管理学习笔记(一)

    这个注解允许我们指定事务的传播行为(如REQUIRED、REQUIRES_NEW等)、隔离级别(如READ_COMMITTED、SERIALIZABLE等)以及回滚规则。这种方式使得事务管理变得简单且易于维护。 对于源码分析,Spring的`...

    Hibernate4实战 之第五部分:Hibernate的事务和并发

    这意味着,当你的应用程序与数据库进行交互时,其行为遵循数据库定义的事务隔离级别,而真正的事务支持取决于底层数据库的实现。 #### 三、事务并发处理 Hibernate 提供了两种主要的并发控制机制: 1. **乐观锁...

    hibernate事务

    Hibernate支持四种事务隔离级别,对应SQL标准的四种隔离级别: - READ UNCOMMITTED:读未提交 - READ COMMITTED:读已提交 - REPEATABLE READ:可重复读 - SERIALIZABLE:串行化 五、编程式事务管理 在代码中...

    Spring+Hibernate注解事务实例

    - 在Service层的方法上添加@Transactional注解,指定事务的传播行为(如REQUIRED、REQUIRES_NEW等)和隔离级别。 - 在DAO层,使用Hibernate的Session和Query对象进行数据库操作,Spring会在事务的上下文中管理这些...

    day36 09-Hibernate中的事务:事务处理

    在Hibernate的配置文件中,可以设置事务相关的属性,比如默认的事务隔离级别、是否自动开始事务等。例如: ```xml &lt;property name="hibernate.connection.isolation"&gt;2&lt;/property&gt; &lt;!-- 2对应READ_COMMITTED隔离...

    JDBC和hibernate事务的详解

    Hibernate支持的事务隔离级别与JDBC相同,可以通过配置`hibernate.connection.isolation`属性进行设置。 ### 3. 事务的并发处理 在多用户环境中,事务的并发处理至关重要。常见的并发问题包括: - **脏读(Dirty ...

    Hibernate编程式事务与Spring Aop的声明式事务(spring与hibernate集成)

    在Spring中,你可以为特定的类或方法声明事务属性,如事务的传播行为、隔离级别、是否回滚等。这些配置通常在Spring的XML配置文件中完成,或者使用Java配置类进行。当一个方法被标记为@Transactional,Spring会在...

    Hibernate的事务管理.doc

    Spring事务管理器会自动处理事务的开始、提交、回滚,并根据方法的配置自动调整事务隔离级别。 总结,Hibernate的事务管理是保证数据库操作正确性和一致性的关键,理解并熟练运用事务的四大特性及不同隔离级别,能...

Global site tag (gtag.js) - Google Analytics