【问题标题】:JPA delete does not executedJPA 删除不执行
【发布时间】:2021-09-08 16:05:36
【问题描述】:

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

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);
}

我错过了什么?

【问题讨论】:

  • 如果您在线程中抛出异常,您的所有 JPA 事务将被回滚。你在用 SpringBoot 吗?
  • 这是新的。是的,它的 Spring Boot。有办法吗?
  • 请在回答中查看以下详细信息

标签: java spring hibernate jpa repository


【解决方案1】:

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

@Transactional(noRollbackFor=TokenException.class)

【讨论】:

    【解决方案2】:

    Spring 存储库已使用 @Transactional 进行注释。这意味着如果在处理您的数据时引发错误,所有流都将被回滚。

    如果你想禁用spring存储库的transactional过程你需要在你的界面中重新定义delete方法并用@Transactional(propagation = Propagation.SUPPORTED)注释它检查here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多