java - 与注释为 @Transactional 的方法的调用者进行通信

标签 java spring transactions

我有一个正在使用 Spring @Transactional 注释的方法:

    @Transactional
    public void persistAmendments(int _cutsheetId) {
          ...
    }

如果发生强制回滚此事务的情况,persistAmendments() 的调用者将如何知道这一点?我希望我的调用代码能够适本地处理这种情况。是否有特殊的异常被抛出堆栈?

最佳答案

调用持久层的方法将捕获任何 RuntimeExceptions,这将让它知道您在保存数据时发生了错误。 Spring 默认情况下会回滚任何抛出 RuntimeException 的事务。这是我的意思的一个简短示例。

修改服务

@Service
public class AmendmentService {

    @Autowired
    private AmendmentRepository amendmentRepository;

    public boolean persistAmendments(int _cutsheetId) {
        boolean persistSuccessful = true;
        try {
            amendmentRepository.persistAmendments(_cutsheetId);
        } catch (RuntimeException e) {
            persistSuccessful = false;
        }
        return persistSuccessful;
    }
}

修正存储库

@Repository
public class AmendmentRepository {

    @Transactional
    public void persistAmendments(int _cutsheetId) {
        //attempt to persist
    }

}

关于java - 与注释为 @Transactional 的方法的调用者进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30266709/

相关文章:

java - 在java中增加双变量值并打印的方法

java - Android API 25 之后,SQLite db 文件在设备/模拟器上的位置是什么?

java - 在 Spring Boot 1.4 中测试安全性

java - 自定义 Spring Boot 错误响应代码而不更改默认主体

java - 只打印那些是 Java 数组中另一个数字的两倍的数字

java - 运行 JSP 和 Servlet 需要什么技术?

java - NullPointer 异常存储库 Spring Boot Jpa

mysql - 为什么我使用 SELECT ... FOR UPDATE 锁从 mysql 中获得死锁?

java - JPA/Hibernate - 不需要的部分回滚和 session 处理

hibernate - Spring + Hibernate 事务需要 25 秒什么都不做