我有一个正在使用 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/