gpt4 book ai didi

java - 未捕获交易异常

转载 作者:行者123 更新时间:2023-12-01 19:16:33 25 4
gpt4 key购买 nike

我正在尝试在方法中使用@Transational,但我面临以下问题。首先是这样的场景:

1-我更新了他的密码

2-我将他的 ID 插入到跟踪表中(简单插入查询)

为了测试我的事务,我在插入查询中给出了现有的 id(主键)。

事务有效,但我收到此错误事务默默回滚,因为它已被标记为仅回滚知道这两个函数是在 try-catch block 内,通常它应该返回内部错误

当我在响应上使用断点时,它显示内部错误,但在 Postman 中,我得到事务静默回滚,因为它已被标记为仅回滚

这是我的代码:

import javax.transaction.Transactional;

@Transactional
public UpdateUserPasswordResponse updateUserPassword(String login, String pwd, String newPwd)
throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException,
InvalidAlgorithmParameterException, NoSuchAlgorithmException, NoSuchPaddingException,
UnsupportedEncodingException {

GetUserByUsernameAndPasswordResponse responseLogin = new GetUserByUsernameAndPasswordResponse();

UpdateUserPasswordResponse response = new UpdateUserPasswordResponse();

// some code

if (responseLogin.getUser() != null) {

//some code

try {
// call the update query from DAO
int lineUpdated = dao.updateUserPassword(login, Cryptedpwd);


int lineInserted = dao.insertUtilisateurTracking(responseLogin.getUser().getId(), new Date());

response.setMessage(Constants.SUCCESS);
response.setStatus(Constants.OK);

} catch (Exception e) {

response.setMessage(Constants.ERREUR_INTERNE);
response.setStatus(Constants.KO);

}
} else {
if (responseLogin.getMessage().equals(Constants.LOGIN_PASSWORD_INCORRECT)) {
response.setStatus(Constants.KO);
response.setMessage(Constants.LOGIN_PASSWORD_INCORRECT);
} else {
response.setMessage(Constants.ERREUR_INTERNE);
response.setStatus(Constants.KO);
}
}

return response;

}

最佳答案

这是正常行为,原因是您的 insertUtilisateurTracking 方法在执行时需要 TX。但是,当在 updateUserPassword 方法内部调用它时,有一个可用的 TX,容器不会创建新的并使用现有的 TX。因此,如果 insertUtilisateurTracking 方法中发生任何异常,它会导致 TX 设置为 rollBackOnly(即使您在调用方捕获异常并忽略它)。

关于java - 未捕获交易异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59409745/

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