我接受了采访,我被问到一个让我无言以对的问题。所以我想也许我可以在这里提出这个问题并得到正确答案。 问题如下。
在Spring中,我们使用hibernate进行数据库操作。我有一个 Java类,其中有多个对象需要 持久存储在数据库中(比如说3个对象)。现在,我想确定是否 第三个对象无法持久,然后是第一个和第二个 对象应该回滚。此行为应由 Spring框架,问题是Spring如何确保这一点 行为是否实现?
仅仅为了我个人的理解,即使我想确保在hibernate中实现这种行为,我该如何实现呢?
对此事的任何帮助都将受到高度赞赏。感谢
答案 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