`
luckytwo
  • 浏览: 21506 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Spring Hibernate 配置声明式事务无效

阅读更多
在工程的spring配置文件里量配置了声明式事务,但测试时却不回滚,异常后仍然会保存部分数据。

1、首先,想到的是配置是否正确,事务是否给加上了。

使用:
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate3.SpringSessionContext</prop>

Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();

Query q = session.createSQLQuery("select * from T_SQUENCE");
q.list();


正确运行,说明DAO的方法正确的加入了事务。getCurrentSession()方式获取session需要绑定事务。

2、然后,考虑既然有事务,那异常时怎么不回滚呢?

查看Spring的文档发现下面的描述:

In its default configuration, the Spring Framework's transaction infrastructure code only marks a
transaction for rollback in the case of runtime, unchecked exceptions; that is, when the thrown exception
is an instance or subclass of RuntimeException. (Errors will also - by default - result in a
rollback). Checked exceptions that are thrown from a transactional method do not result in rollback in
the default configuration.

默认情况下,Checked exceptions 不会回滚。

查看DAO实现,确实是捕获了异常后throw 一个自己定义的RecommendDAOException ,而这个类继承的是Exception。

3、解决问题

配置下回滚条件就行了

<tx:method name="*" propagation="REQUIRES_NEW" rollback-for="Throwable"/>  
分享到:
评论

相关推荐

    springmvc+spring4+hibernate5

    Spring的事务管理可以确保数据的一致性,支持编程式和声明式两种方式。 3. **Hibernate 5**: Hibernate 5 提供了一种简单的方式来处理数据库操作,通过对象-关系映射,将Java对象与数据库表对应。它可以自动处理...

    struts、spring、hibernate工作原理.

    - **事务管理**:Spring提供了声明式事务管理的支持,可以通过简单的XML配置或者注解实现。 #### Hibernate 原理与特点 **Hibernate** 是一个全功能的ORM(Object-Relational Mapping)框架,用于简化数据库交互的...

    maven与spring MVC

    通过Spring的声明式事务管理,可以在服务层方法上添加@Transactional注解,实现事务的自动管理。此外,Spring还提供了一些便捷的工具,如HibernateTemplate或JdbcTemplate,简化了DAO(数据访问对象)层的编写。 ...

    SpingMVC Hibernate验证jar包

    Spring通过声明式事务管理,可以轻松地处理事务边界,使得事务管理更加简洁。此外,Spring还提供了一种称为HibernateTemplate或HibernateSessionFactory的抽象层,使得开发者可以在不直接接触SessionFactory和...

    hibernate使用中与各种数据库字段类型对应类型训练

    - **事务管理**:Hibernate支持编程式和声明式事务管理,确保数据的一致性和完整性。 通过这次训练,你将深入理解Hibernate如何处理不同数据库字段类型,并学会如何在实际项目中灵活运用,提升开发效率和代码质量。...

    Hibernate 开发指南

    声明式事务管理则依赖于容器(如Spring)提供的支持。 9. **缓存机制** Hibernate提供了第一级缓存(Session缓存)和第二级缓存,以及查询缓存。合理利用缓存可以显著提升应用性能。 10. **性能优化** - 避免N+1...

    spring-framework 使用gradle编译后源码

    5. **事务管理**:Spring提供了声明式和编程式事务管理,可以在不同数据访问技术上实现一致的事务策略。 6. **Spring Boot**:虽然不在4.3.18版本中,但了解Spring Boot可以帮助理解Spring生态系统的现代化发展。...

    04. SpringBoot整合持久层技术

    Spring Boot提供声明式事务管理,通过`@Transactional`注解即可开启事务。默认使用`PlatformTransactionManager`,可自定义事务管理器,如JpaTransactionManager(适用于JPA)和DataSourceTransactionManager(适用...

    面试中常问到的问题ssh

    3. **事务管理**:Spring 提供了声明式和编程式的事务管理,简化了事务的处理。 4. **服务集成**:Spring 通过多种适配器和接口,方便地与其他框架(如 Struts、Hibernate)集成,构建完整的应用解决方案。 5. **Web...

    基于Java配置的登录小项目

    传统的XML配置文件曾是主流,但随着Spring的发展,Java配置逐渐成为首选,因为它提供了更直观、更强大的代码式配置方式。 【描述】:“java实战” 这个描述表明,我们将通过实际编程的方式学习和理解Java配置的...

    计算机java实习日记 (2).docx

    Spring通过提供IOC容器,实现了对象的生命周期管理,并且支持声明式事务管理等功能。 - **Hibernate**:作为一款对象关系映射(Object-Relational Mapping, ORM)工具,Hibernate可以将Java对象映射到关系型数据库表...

    java技术面试题.pdf

    它允许开发者以声明式的方式管理依赖,简化了代码结构,并且提供事务管理、数据访问集成以及其他企业服务。 3. **AJAX技术**: - AJAX(Asynchronous JavaScript and XML)是一种在不刷新整个页面的情况下,利用...

    java面试八股文.pdf

    - 提供了一种声明式的处理数据流的方式,支持并行处理。 27. **Optional类** - 避免了空指针异常,提高了代码的健壮性。 28. **Java中的并发和多线程** - 通过线程池管理线程资源,提高系统的吞吐量。 - 使用...

    SOA上的业务验证技术

    3. **契约式验证**:通过服务接口定义(如WSDL)声明输入和输出的约束,确保服务调用的合规性。 4. **消息级验证**:在消息传递过程中检查消息格式、内容和业务规则。 5. **事务级验证**:确保跨服务操作的一致性和...

Global site tag (gtag.js) - Google Analytics