JPA 删除未执行

JPA delete does not executed

如果我在下一行立即抛出异常,我将无法从数据库中删除。

public void verifyExpiration(RefreshToken token) {
    if (token.getExpiryDate().compareTo(Instant.now()) < 0) {
        this.delete(token.getToken());
        throw new TokenException("Refresh token was expired: " + token.getToken());
    }
}

public void delete(String token) {
    this.refreshTokenRepository.deleteByToken(token);
}

我错过了什么?

Spring 个存储库已用 @Transactional 注释。这意味着如果在处理您的数据时抛出错误,所有流程都将回滚。

如果您想禁用 spring 存储库的事务处理,您需要重新定义界面中的 delete 方法并用 @Transactional(propagation = Propagation.SUPPORTED) 注释检查 here

在 SpringBoot 中,如果你想在抛出异常的同时完成事务,你可以使用 noRollbackFor 作为 @Transactional 注释,如下所示:

@Transactional(noRollbackFor=TokenException.class)