Spring隐藏了@Transactional方法抛出的RuntimeException

时间:2017-02-20 15:48:09

标签: spring spring-boot transactions spring-data-jpa

作为我的代码的一部分,@Transactional带注释的方法。在某些情况下,该方法会抛出自定义异常并执行回滚。每当发生这种情况时,方法调用会产生TransactionSystemException并且无法获得原始的自定义异常(它不是Exeption的根本原因)。

我可以以某种方式访问​​我的方法抛出的原始异常吗? 我可以阻止spring抛出TransactionSystemException,但仍然会回滚吗?

@Transactional
public Association create(Long accountId) {
    // if association already exists, throw exception
    throw new ErrorInfoException(ErrorInfo.duplicateAssociation(accountId).info("This Association already exists").build());
}

1 个答案:

答案 0 :(得分:1)

不确定如何管理该方法之外的异常,但是您需要捕获 function retrievePermissions(fileId, callback) { var request = gapi.client.drive.permissions.list({ 'fileId': fileId }); request.execute(function (resp) { callback(resp.items); }); } retrievePermissions(self.realtimeDocId, function (resp) { resp; }); ,然后在您的情况下调用TransactionSystemException,因为您的自定义异常应首先在堆栈上:< / p>

  

返回之前抛出的应用程序异常   交易异常,如果有的话。

如果出于某种原因,中间会有更多例外情况,那么请根据规范选择getApplicationException()

  

返回第一个在失败中抛出的异常   transaction:即应用程序异常(如果有)或者   TransactionSystemException的原因。

如果您使用Exception的getOriginalException()方法,那么在这种情况下可能不是正确的方法。