Topic: spring+hibernate事务探讨 |
Print this page |
1.spring+hibernate事务探讨 | Copy to clipboard |
Posted by: lianghyan Posted on: 2004-09-03 17:22 现在我在使用spring开发系统,spring吸引我的地方就是它提供了轻量级的事务处理机制,在这里抛砖引玉希望得到大家的指点。 spring提供了一下的事务类型: 1. PROPAGATION_REQUIRED:支持当前正在运行的事务,如果事务不存在则创建新的事务 2. PROPAGATION_REQUIRES_NEW:永远创建新的事务,如果当前存在事务则先挂起该事务的执行。 3. PROPAGATION_SUPPORTS:如果在事务上下文中执行,则支持当前存在的事务,否则不支持事务 4. PROPAGATION_MANDATORY:方法必须参与事务,如果不存在事务,则抛出异常。 5. PROPAGATION_NESTED:困惑 6. PROPAGATION_NOT_SUPPORTED:方法不参与事务,如果在事务上下文中运行,则挂起当前执行的事务 7. 8. PROPAGATION_NEVER:方法在不参与事务,如果在事务上下文中运行,则抛出异常。 其中nested方式在ejb中也无对应,项不出应用的场景。 事务的隔离级不赘述。 Spring的事务提供了一个readOnly的属性,该属性对事务处理进行了优化,该属性要来处理查询操作。对于增、删、改的操作则不能配置该属性。在使用HibernateTransactionManager时,对readOnly属性,Hibernate Session不做检测,数据不会flush到数据库。 Spring提供了HibernateTemplate来管理session的生存期。在这种机制下对增删改必须配置事务属性。否则数据库将不被更新 不知道我的这些理解是否正确,提出来希望能够得到指正。 |
2.Re:spring+hibernate事务探讨 [Re: lianghyan] | Copy to clipboard |
Posted by: looluo Posted on: 2004-09-14 09:50 HibernateTemplate可以单独使用,不一定要配置事务属性 刷新数据是根据flush mode和是否存在事务共同判断的 刷新操作是在HibernateAccessor类的flushIfNecessary方法中执行的 flushIfNecessary方法如下 public void flushIfNecessary(Session session, boolean existingTransaction) throws HibernateException { 如果flush mode是FLUSH_EAGER,无论存不存在事务,都立即刷新。 如果不存在事务而flush mode是FLUSH_AUTO,则立即刷新,否则刷新操作将由事务控制。 flushIfNecessary在HibernateTemplate的execute方法中被调用,HibernateTemplate提供的数据访问操作最终都是调用execute实现的。 |
3.Re:spring+hibernate事务探讨 [Re: lianghyan] | Copy to clipboard |
Posted by: floater Posted on: 2004-09-14 10:31 good explanation!! |
4.Re:spring+hibernate事务探讨 [Re: lianghyan] | Copy to clipboard |
Posted by: lianghyan Posted on: 2004-09-15 09:51 看了几个类,在HibernateTemplate设置flushmode就可以了 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |