采用编程式事务
1、getCurrentSession()与openSession()的区别?
*
采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()
创建的session则不会
*
采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()
创建的session必须手动关闭
2、使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:
*
如果使用的是本地事务(jdbc事务)
<property
name="hibernate.current_session_context_class">thread</property>
*
如果使用的是全局事务(jta事务)
<property
name="hibernate.current_session_context_class">jta</property>
1、声明式事务配置
* 配置SessionFactory
* 配置事务管理器
* 事务的传播特性
*
那些类那些方法使用事务
2、编写业务逻辑方法
*
继承HibernateDaoSupport类,使用HibernateTemplate来持久化,HibernateTemplate是
Hibernate Session的轻量级封装
*
默认情况下运行期异常才会回滚(包括继承了RuntimeException子类),普通异常是不会滚的
*
编写业务逻辑方法时,最好将异常一直向上抛出,在表示层(struts)处理
* 关于事务边界的设置,通常设置到业务层,不要添加到Dao上
3、了解事务的几种传播特性
1. PROPAGATION_REQUIRED:
如果存在一个事务,则支持当前事务。如果没有事务则开启
2. PROPAGATION_SUPPORTS:
如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行
3. PROPAGATION_MANDATORY:
如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。
4. PROPAGATION_REQUIRES_NEW:
总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
5. PROPAGATION_NOT_SUPPORTED:
总是非事务地执行,并挂起任何存在的事务。
6. PROPAGATION_NEVER:
总是非事务地执行,如果存在一个活动事务,则抛出异常
7. PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中.
如果没有活动事务,
则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行
4、Spring事务的隔离级别
1. ISOLATION_DEFAULT:
这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.
另外四个与JDBC的隔离级别相对应
2. ISOLATION_READ_UNCOMMITTED:
这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。
这种隔离级别会产生脏读,不可重复读和幻像读。
3. ISOLATION_READ_COMMITTED:
保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
4. ISOLATION_REPEATABLE_READ:
这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
5. ISOLATION_SERIALIZABLE
这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。
除了防止脏读,不可重复读外,还避免了幻像读。
分享到:
相关推荐
然而,有时为了更细粒度的控制或者在特定场景下,我们可能需要采用编程式事务管理。 首先,了解事务的四大特性(ACID)是必不可少的: 1. 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成,不...
在Spring框架中,事务管理是应用开发中的重要一环,它确保了数据的一致性和完整性。Spring提供了两种主要的事务管理方式:声明...然而,在实际应用中,应当根据项目需求和团队习惯来决定采用声明式还是编程式事务管理。
Spring框架提供了两种主要的事务管理方式:声明式事务管理和编程式事务管理。本资料着重于“编程式事务管理”,这是一种通过代码直接控制事务开始、提交、回滚等操作的方式。 在Spring中,编程式事务管理通常使用...
- 实现方法:采用编程式事务模型,利用JTA等API实现全局事务管理。 - 优势:能够保证跨资源的数据一致性。 3. **高性能事务处理**: - 使用场景:高并发环境下的事务处理。 - 实现方法:结合声明式事务模型和...
例如,对于一些核心服务使用注解驱动的事务管理,而对于其他辅助服务则采用编程式事务管理。 在配置事务时,通常需要先定义数据源(DataSource),如使用阿里巴巴的Druid数据源: ```xml <!-- 数据源配置项... --...
1. **编程式事务**:在需要精细控制的场景,如权限管理模块,采用编程式事务管理。 2. **声明式事务**:在多数业务场景,如办公用品管理,使用声明式事务,简化事务处理。 3. **无事务处理**:对于无需事务支持的...
5. **编程模式**:在J2SE应用中,开发者通常采用编程式事务管理,即在代码中显式调用UserTransaction的开始、提交和回滚方法。而在J2EE应用中,通常使用声明式事务管理,由容器自动管理事务边界。 6. **事务属性**...
编程式事务管理使用 TransactionTemplate 或者直接使用底层的 PlatformTransactionManager。声明式事务管理有基于 tx 和 aop 名字空间的 xml 配置文件和基于 @Transactional 注解的方式。 为什么使用 Spring 来进行...
4. **事务配置**:通常采用编程式事务管理或声明式事务管理,通过 @Transactional 注解来控制事务的边界。 5. **Controller层**:在 Controller 中调用 Service 层方法,传递参数并返回结果,由 Spring MVC 负责视图...
4. **事务控制**:根据项目需求,可能采用编程式事务管理或者基于Spring的声明式事务管理,确保数据的一致性。 5. **性能优化**:MyBatis允许使用预编译的SQL语句(PreparedStatement),减少解析和编译时间,提高...
在Java应用中,通常使用容器管理的事务(CMT),在Spring框架中则常采用编程式事务管理。事务是数据库操作的基本单元,确保数据的一致性和完整性。 【实体关系】 Hibernate支持多种对象关系映射,如一对一、一对多...
在Spring环境中,通常采用编程式事务管理或声明式事务管理,确保数据的一致性。 综上所述,MyBatis 3 提供了一种简单而强大的方式来进行数据库操作。通过学习这个简单的示例,你可以理解其基本操作流程,并以此为...
而且编程式事务管理会造成事务管理代码和被管理的代码耦合,不符合软件工程中“高内聚、低耦合”的要求。若采用AOP,则可以避免以上缺陷。 作者博客的示例代码:http://legend2011.blog.51cto.com/3018495/1239139。
Spring框架提供了两种主要类型的事务管理方式:编程式事务管理和声明式事务管理。声明式事务管理通过XML配置或注解的形式定义事务边界,使得业务逻辑与事务控制分离。 ### 描述分析:XML配置示例 提供的XML配置...
编程式事务管理需要在代码中手动开启、提交和回滚事务,而声明式事务管理则依赖于Spring等框架进行配置。 **3. 编程式事务管理** 在Java中,你可以使用`java.sql.Connection`对象来管理事务。在业务逻辑代码中,你...
然而,在实际开发过程中,经常会遇到一些关于Spring事务的问题,如事务失效、事务回滚、大事务问题以及编程式事务等。本文将深入探讨这些问题,并给出相应的解决方案。 #### 一、事务不生效的原因及解决办法 1. **...
编程式事务管理需要在代码中显式地调用开始、提交、回滚等事务操作,而声明式事务管理则是通过配置或注解来定义事务边界,更加简洁且易于维护。 1. 声明式事务管理的优势: - 将事务管理逻辑与业务逻辑分离,降低...
Spring 提供了多种方式来配置事务管理,主要分为编程式事务管理和声明式事务管理。下面将详细介绍这五种Spring 事务配置方式。 1. **基于AOP代理的声明式事务** 这是最常见的配置方式,通过AOP代理在方法调用前后...
编程式事务管理允许在代码中显式地开始、提交、回滚事务。这种方式通常在需要更细粒度控制事务时使用。例如,可以使用PlatformTransactionManager接口的begin、commit和rollback方法来管理事务。 5. **XML配置的...
如果采用XML配置方式,则需要在Spring的XML配置文件中进行事务配置,并通过aop命名空间来定义事务通知及切点,从而实现声明式事务管理。 对于开发者而言,Spring与MyBatis的整合简化了事务和持久层的处理,减少了...