Spring框架中的回滚机制

时间:2016-11-24 13:37:53

标签: java spring hibernate

我接受了采访,我被问到一个让我无言以对的问题。所以我想也许我可以在这里提出这个问题并得到正确答案。 问题如下。

  

在Spring中,我们使用hibernate进行数据库操作。我有一个   Java类,其中有多个对象需要   持久存储在数据库中(比如说3个对象)。现在,我想确定是否   第三个对象无法持久,然后是第一个和第二个   对象应该回滚。此行为应由   Spring框架,问题是Spring如何确保这一点   行为是否实现?

仅仅为了我个人的理解,即使我想确保在hibernate中实现这种行为,我该如何实现呢?

对此事的任何帮助都将受到高度赞赏。感谢

1 个答案:

答案 0 :(得分:2)

阅读Spring的@Transactional注释,它如何与AOP代理一起工作,以及如何执行回滚。引用文档:

  

指示Spring Framework事务的推荐方法   交易工作要回滚的基础设施是   从当前正在执行的代码中抛出异常   交易的背景。 Spring Framework的交易   基础架构代码将捕获任何未处理的异常,因为它会冒泡   调用堆栈,并确定是否标记   回滚事务。

     

在其默认配置中,Spring Framework的事务   基础结构代码仅标记用于回滚的事务   运行时,未经检查的异常;也就是抛出异常的时候   是RuntimeException的实例或子类。 (错误也会 -   默认情况下 - 导致回滚)。检查抛出的异常   从事务方法不会导致默认回滚   配置。

参考:

@Transactional http://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/transaction.html#tx-decl-explained

回滚http://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/transaction.html#transaction-declarative-rolling-back