gpt4 book ai didi

java - DAO方法中的事务回滚

转载 作者:行者123 更新时间:2023-12-02 06:35:43 27 4
gpt4 key购买 nike

我需要从我的 DAO 方法返回一个结果(即使发生异常)。我尝试以这种方式进行操作,因为它在异常情况下不起作用(我有一个异常(exception):发生异常后不要刷新 session )。

@Repository
@Transactional(rollbackFor=HibernateException.class)
public class UserDAO {

@Override
public boolean save(Proxy proxy) {
try{
sessionFactory.getCurrentSession().save(proxy);
}
catch(HibernateException e){
//TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
}
return true;
}

}

然而,当我取消注释 //TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();一切都像我期望的那样工作。我知道文档不建议使用这种方法,但注释回滚对我不起作用。你能解释一下吗,为什么?如果可能的话,我可以修改代码以使其工作吗?

最佳答案

只有方法抛出异常,Spring才会回滚。如果它被抛出并捕获在方法内部,Spring 对异常一无所知,因此认为一切正常,因此不会回滚事务。

因此,要么继续调用 setRollbackOnly,要么最好不要使用 boolean 结果来指示操作成功或失败。如果保存不成功,则应该抛出异常。

关于java - DAO方法中的事务回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19767594/

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