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)
如果我在下一行立即抛出异常,我将无法从数据库中删除。
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)