gpt4 book ai didi

java - 如何在抛出异常时在 hibernate 中执行事务

转载 作者:行者123 更新时间:2023-11-29 04:15:29 26 4
gpt4 key购买 nike

我在使用 Hibernate 实现的事务服务层中有以下方法:

@Override
public void activateAccount(String username, String activationCode)
throws UsernameNotFoundException, AccountAlreadyActiveException,
IncorrectActivationCodeException {
UserAccountEntity userAccount = userAccountRepository.findByUsername(username);
if (userAccount == null) {
throw new UsernameNotFoundException(String.format("User %s was not found", username));
} else if (userAccount.isExpired()) {
userAccountRepository.delete(userAccount);
throw new UsernameNotFoundException(String.format("User %s was not found", username));
} else if (userAccount.isActive()) {
throw new AccountAlreadyActiveException(String.format(
"User %s is already active", username));
}
if (!userAccount.getActivationCode().equals(activationCode)) {
throw new IncorrectActivationCodeException();
}
userAccount.activate();
userAccountRepository.save(userAccount);
}

如您所见,在 else if (userAccount.isExpired()) block 中,我想先删除 userAccount 然后抛出异常。但是由于它抛出异常并突然退出该方法,因此不会执行删除。

我想知道是否有任何方法可以在抛出异常的同时保留删除操作。

最佳答案

我也遇到过同样的情况。

我的解决方案是使用 Spring Security FailureHandler

有了这个类,您可以在失败事件后采取行动。

看这里, https://www.baeldung.com/spring-security-custom-authentication-failure-handler

关于java - 如何在抛出异常时在 hibernate 中执行事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52619924/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com