- 浏览: 1325623 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (896)
- spring4 (14)
- hibernate3 (26)
- spring2 (35)
- struts2 (55)
- struts1 (15)
- 设计模式 (15)
- java (172)
- mybatis3 (11)
- sql (17)
- mysql (13)
- jbpm (10)
- J2EE (45)
- tools (29)
- js (83)
- 数据结构 (13)
- Html (26)
- web (22)
- flex (33)
- Oracle (57)
- linux (49)
- 算法 (6)
- 其它 (12)
- easyui (1)
- bootstrap (13)
- xml (2)
- tomcat (1)
- redis (10)
- activemq (2)
- webservice (11)
- maven (2)
- springboot (1)
- ubuntu (1)
- python (14)
- rocketmq (1)
- springcloud (10)
- opencv (1)
最新评论
-
mike_eclipse:
Hashtable是线程不安全的吗?好像是线程安全的吧?
多线程之集合类 -
July01:
推荐用StratoIO打印控件,浏览器和系统的兼容性都很好,而 ...
lodop打印控件 -
xingcxb:
经过测试,假的,依旧会出现中文乱码!!!!store方法里面采 ...
java 读写Properties文件,不会出现中文乱码 -
tiger20111989:
...
Spring注解方式管理事务 -
zw7534313:
...
js 文字上下滚动 无间断循环显示
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或者Criteria的setLockMode()方法来设定要锁定的表或列(Row)及其锁定模式。可设定的模式有两个:
(1) LockMod.UPGRADE
(2) LockMode.UPDGRADE_NOWAIT:
评论
发表评论
-
hibernate Search
2010-10-15 10:09 1408hibernate Search 使用过lucene的人都 ... -
org.hibernate.LazyInitializationException: could not initialize proxy - no Sessi
2010-09-10 15:57 20191.设置里 lazy = "false" ... -
Hibernate数据检索策略
2010-08-09 08:52 1224Hibernate数据检索策略: Hiberna ... -
Java、hibernate、sql类型对照
2010-08-09 08:48 1502基本值类型: Java基本类型、对应的Hibernate映射 ... -
Hibernate数据检索策略
2010-08-06 15:58 1346Hibernate数据检索策略:Hibernate的数据检索策 ... -
生成model类的serialVersionUID
2010-06-25 16:36 1126生成model类的serialVersionUID: 在命令 ... -
spring 与 hibernate Annotation配置(entry)
2010-06-13 16:53 2040(5)TCompanyInfo.java import ... -
Hibernate的复杂用法HibernateCallback
2010-06-13 09:00 1140HibernateTemplate还提供一种更加灵活的方式来操 ... -
hibernate3与spring2零配置
2010-06-11 15:19 1413ssh除了xml配置之外,还可以用标注式配置: (1)sp ... -
hibernate3 annotation 的实例 3 (one to many)
2010-03-24 15:19 2106http://bigcat.easymorse.com/?p= ... -
hibernate annotation spring
2010-03-24 08:35 1096http://2625962-163-com.iteye.co ... -
hibernate3 annotation 的实例 2
2010-03-23 15:51 1814实例二:(主键sequence策 ... -
hibernate3 annotation的实例
2010-03-23 14:55 1996实例一:一个对象的增删改查: import java. ... -
query specified join fetching, but the owner of the fetched association
2010-03-04 09:57 1973错误原因分析: 首先看HQL语句: ... -
illegal attempt to dereference collection
2010-03-04 09:12 3700首先说一句:是版本的问题! 我写的hql为: from D ... -
深化学习hibernate
2010-01-29 14:10 11293.4.5. 查询语言中 ... -
查询hibernate 部分数据
2010-01-29 10:56 1408hibernate查出来人部分数据基本上是数组,有的时候需要对 ... -
解决hibernate中的lazy的问题
2010-01-28 11:38 1414<many-to-one name="TCu ... -
hibernate 批量添加
2009-12-29 13:37 2066public void createRolePermissio ... -
hibernate 常见错误
2009-12-24 12:52 9711.org.hibernate.LazyInitializat ...
相关推荐
Hibernate 事务隔离级别 深入探究 在 Hibernate 中,事务隔离级别是指数据库系统提供的一种机制,以解决并发事务带来的问题。为了确保数据库的可靠性和一致性,Hibernate 提供了四种事务隔离级别,分别是 ...
本文主要关注于使用Hibernate进行事务管理和设置事务隔离级别的知识。Hibernate是一个流行的Java ORM(对象关系映射)框架,它简化了数据库操作,同时也提供了对事务的管理。 首先,我们需要理解事务的基本概念。...
在 Hibernate 中,可以通过设置 hibernate.connection.isolation 属性来指定事务隔离级别。 例如: ```xml <property name="hibernate.connection.isolation">2 ``` 这将设置事务隔离级别为 READ_COMMITTED。 解决...
Hibernate还允许开发者通过配置设置不同的事务隔离级别,以满足不同应用场景下的需求。常见的隔离级别包括: - `READ_UNCOMMITTED` - `READ_COMMITTED` - `REPEATABLE_READ` - `SERIALIZABLE` 这些级别的选择取决...
根据数据库系统的不同,Hibernate支持四种事务隔离级别:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。不同的隔离级别会带来不同的并发控制效果,开发者需要根据实际需求选择合适的级别。 ##...
- 注解驱动:使用`@Transactional`注解直接在服务层的方法上,指定事务属性,如传播行为、隔离级别、超时和是否只读。 2. **传播行为:**决定了事务如何在不同的调用之间传播。例如,`PROPAGATION_REQUIRED`是最...
例如,对于读多写少的场景,乐观锁和较高的事务隔离级别(如Repeatable Read)可能是更好的选择。而对于写操作频繁的情况,悲观锁和更低的隔离级别可能更合适。 总的来说,理解并熟练掌握Hibernate的事务和并发控制...
在Spring框架中,为了管理和控制Hibernate事务,Spring提供了两种关键工具:HibernateTemplate和JdbcTemplate。这两个模板类简化了与数据库的交互,同时也处理了事务管理。让我们深入了解一下这两个类以及它们如何...
Hibernate提供了四种事务隔离级别:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。开发者可以根据应用场景选择合适的隔离级别。此外,...
这个注解可以应用在类或方法级别,用于指定事务的传播行为、隔离级别、超时限制以及是否回滚默认异常。例如: ```java @Service @Transactional(isolation = Isolation.REPEATABLE_READ) public class UserService ...
在需要进行事务处理的业务层方法上添加@Transactional注解,指定事务属性如传播行为、隔离级别、读写模式等。例如: ```java @Service public class UserService { @Transactional public void addUser(User ...
这个注解允许我们指定事务的传播行为(如REQUIRED、REQUIRES_NEW等)、隔离级别(如READ_COMMITTED、SERIALIZABLE等)以及回滚规则。这种方式使得事务管理变得简单且易于维护。 对于源码分析,Spring的`...
这意味着,当你的应用程序与数据库进行交互时,其行为遵循数据库定义的事务隔离级别,而真正的事务支持取决于底层数据库的实现。 #### 三、事务并发处理 Hibernate 提供了两种主要的并发控制机制: 1. **乐观锁...
Hibernate支持四种事务隔离级别,对应SQL标准的四种隔离级别: - READ UNCOMMITTED:读未提交 - READ COMMITTED:读已提交 - REPEATABLE READ:可重复读 - SERIALIZABLE:串行化 五、编程式事务管理 在代码中...
- 在Service层的方法上添加@Transactional注解,指定事务的传播行为(如REQUIRED、REQUIRES_NEW等)和隔离级别。 - 在DAO层,使用Hibernate的Session和Query对象进行数据库操作,Spring会在事务的上下文中管理这些...
在Hibernate的配置文件中,可以设置事务相关的属性,比如默认的事务隔离级别、是否自动开始事务等。例如: ```xml <property name="hibernate.connection.isolation">2</property> <!-- 2对应READ_COMMITTED隔离...
Hibernate支持的事务隔离级别与JDBC相同,可以通过配置`hibernate.connection.isolation`属性进行设置。 ### 3. 事务的并发处理 在多用户环境中,事务的并发处理至关重要。常见的并发问题包括: - **脏读(Dirty ...
在Spring中,你可以为特定的类或方法声明事务属性,如事务的传播行为、隔离级别、是否回滚等。这些配置通常在Spring的XML配置文件中完成,或者使用Java配置类进行。当一个方法被标记为@Transactional,Spring会在...
Spring事务管理器会自动处理事务的开始、提交、回滚,并根据方法的配置自动调整事务隔离级别。 总结,Hibernate的事务管理是保证数据库操作正确性和一致性的关键,理解并熟练运用事务的四大特性及不同隔离级别,能...