继承类的@Transactional:org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
假设有以下类:
@Transactional
public class SubClass extends SuperClass {
public void loadDb(){
//数据库操作
}
}
public class SuperClass {
public void savedb() {
//数据库操作
}
}
savedb是父类的方法,loadDb是子类的方法。如果有以下调用:
@Test
public void test(){
SubClass o = new SubClass();
o.savedb();//将会报没有Session的错误
o.loadDb();//正常
}
可以看到在调父类方法时Hibernate报没有Session的错误(org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here),子类没有问题。
解决办法一:在子类中重载父类方法:
@Transactional
public class SubClass extends SuperClass {
public void loadDb(){
}
@Override
public void savedb() {
super.savedb();
}
}
这样显然繁琐了,子类savedb没有任何新操作。
解决方法二:在父类中标注@Transactional(父类是抽象类也可以):
@Transactional
public class SuperClass {
public void savedb() {
}
}
这需要父类的修改权限。
--- http://www.cnblogs.com/xiefeifeihu/archive/2010/07/27/1785958.html
分享到:
相关推荐
在Java后端开发中,Spring框架提供了强大的事务管理能力,特别是在使用Spring Data JPA时,`@Transactional`注解使得事务处理变得简单易用。这个注解是Spring框架中的核心部分,它允许开发者声明性地控制事务边界,...
* 如果在类上使用 @Transactional 注解,那么该类中的所有方法都会继承该注解的属性。 * 如果在方法上使用 @Transactional 注解,那么该方法将覆盖类上的注解属性。 @Transactional 注解是 Spring 框架中实现声明式...
`@Transactional`是Spring提供的一个注解,用于在方法级别或类级别定义事务属性,如事务的传播行为、隔离级别、读写模式以及超时设置。当一个方法被标记为`@Transactional`时,Spring会自动管理事务的开始、提交或...
如果抛出的是检查异常(继承自Exception的非RuntimeException),则需要在@Transactional注解中明确指定`rollbackFor`属性。 9. **数据库驱动限制**:某些数据库驱动不支持自动提交事务,需要手动关闭自动提交。...
浅谈Spring中@Transactional事务回滚及示例 @Transactional是Spring Framework中的一种事务管理机制,用于管理数据库事务。它可以使得数据库操作更加安全和可靠。本文将详细介绍@Transactional的使用场景、checked...
通过上图中的关系,可以发现 InfrastructureAdvisorAutoProxyCreator 间接实现了 BeanPostProcessor 接口,从 AbstractAutoProxyCreator 类中继承了 postProcessAfterInitialization 方法。Spring 容器在初始化每个...
默认回滚规则是所有未检查异常(继承自`RuntimeException`的异常)和`Error`都会触发回滚,而检查异常(不继承自`RuntimeException`的异常)不会。 3. **编程式事务管理** 使用`TransactionTemplate`或直接操作`...
而"transactional-oop:Java OOP"这个主题则涉及到将事务处理的概念与面向对象编程相结合的技术。 事务是数据库操作的基本单位,它确保一组操作要么全部成功,要么全部失败,以维护数据的一致性和完整性。在Java中,...
- **异常处理**:`@Transactional`注解默认仅在方法抛出未检查异常(继承自`RuntimeException`的异常)时回滚事务。如果抛出受检异常(继承自`Exception`的非`RuntimeException`),需要显式设置`rollbackFor`属性。...
默认情况下,如果在`@Transactional`方法中抛出未检查异常(继承自`RuntimeException`的异常)或者`Error`,Spring会自动回滚事务。如果抛出的是受检异常(非`RuntimeException`),则需要显式设置`rollbackFor`属性...
对于已检查异常(继承自Exception的非RuntimeException),除非显式声明`@Transactional(rollbackFor = Exception.class)`,否则Spring默认不会回滚事务。 通过这样的设置,我们可以在A方法内部调用B方法时确保事务...
提供的`MySpring`可能是一个自定义的Spring配置或工具类,它可能包含了设置事务管理器、扫描带有`@Transactional`注解的bean等配置。使用时,只需将`MySpring`引入到Spring应用上下文中,即可启动Spring AOP和事务...
1. **启用事务管理**:在Spring配置文件中,需要配置事务管理器,例如对于JDBC,可以使用`PlatformTransactionManager`的实现类`DataSourceTransactionManager`。 2. **添加@Transactional注解**:在业务逻辑方法上...
创建一个接口继承自`JpaRepository`,这个接口将提供基本的CRUD操作。如果你需要自定义SQL查询,可以扩展`JpaSpecificationExecutor`接口。 7. **编写业务逻辑** 在Spring Boot的控制器类中注入Repository接口,...
在类级别应用时,所有公共方法都将继承该事务属性。推荐只在公共方法上使用此注解,以避免非预期的行为。Spring建议不要在接口或接口方法上使用,因为AOP代理无法正确处理这些情况。 6. **Spring事务回滚机制** ...
3. **事务回滚规则**:默认情况下,如果在@Transactional注解的方法中抛出未检查异常(继承自RuntimeException的异常)或者Error,Spring会自动回滚事务。对于受检查异常(非RuntimeException),需要显式地声明需要...
对于受检查异常(继承自Exception的非运行时异常),默认情况下事务不会回滚,除非在@Transactional中显式指定。 - 如果在方法内部捕获了异常并处理,事务可能不会回滚,除非在finally块中显式抛出异常或使用Spring...
但是,对于使用@Transactional注解的方法,如果被final修饰,Spring无法通过继承来创建代理类,因此事务管理也就无法正常工作。要避免这种情况,应避免在事务方法上使用final关键字。 3. 异常处理不当: Spring事务...
默认情况下,如果方法抛出未检查异常(继承自`RuntimeException`的异常)或`Error`,事务将被回滚;否则,事务将在方法正常结束时提交。 3. **事务属性**:`@Transactional`注解还支持一些可选属性,如`propagation...
主要通过`@Transactional`注解实现,标注在类或方法上,声明该类或方法需要在事务环境中执行。这种方式降低了代码的复杂性,提高了可维护性。`springboot.tx`文件中可能包含带有`@Transactional`注解的Service层或...