首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jdbi3是否保证对每种类型的异常都回滚事务?

Jdbi3是否保证对每种类型的异常都回滚事务?
EN

Stack Overflow用户
提问于 2021-11-10 12:41:40
回答 1查看 287关注 0票数 2

我有一个类似的密码:

代码语言:javascript
复制
jdbi.inTransaction(h -> {
            
            Dao1 dao1 = h.attach(Dao1.class);
            
            if(!dao1.somequery()) {
                
                throw new CustomException("foobar");
            }

            // ... other statements
}

我是否可以确定,如果抛出CustomExceptionjdbi将回滚事务,或者只在与SQLException或Jdbi相关的异常情况下发生这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-23 21:36:51

引言

让我们考虑Jdbi 3.27.0。

文档

请参阅Javadoc中的org.jdbi.v3.core.Jdbi#inTransaction(org.jdbi.v3.core.HandleCallback<R,X>)方法:

inTransaction public 异常>public HandleCallback callback)抛出X 一种方便的函数,它管理句柄的生命周期并将其输出给回调以供客户使用。当调用回调时,句柄将位于事务中,如果回调正常结束,该事务将被提交;如果回调引发异常,则该事务将被回滚。 类型参数: 回调返回的R类型 X -回调引发的异常类型(如果有的话)。 参数: callback -将在事务中接收打开句柄的回调 返回: 回调返回的值。 抛出: X -回调引发的任何异常

请注意以黑体字标明的案文,它应回答你的问题:

当调用回调时,句柄将位于事务中,如果回调正常完成,该事务将被提交,如果回调引发异常,则将提交回滚。抛出: X -回调引发的任何异常

正如我们所看到的,没有语句声称异常处理行为依赖于异常类型。

源代码

请将本节提供的资料视为草案:可能是粗略的(不准确)。

有些测试涵盖与事务相关的功能。

测试由TestTransactions类:jdbi/TestTransactions.java,v3.27.0·jdbi/jdbi表示。

请看一看整个考试课。

然后,请注意以下与异常相关的测试方法:

  1. testExceptionAbortsTransaction()
  2. testExceptionAbortsUseTransaction()

我们可以从的实现中检查这些测试方法

  1. 实现使用java.io.IOException异常类型。
  2. 实现没有提到,即异常处理行为取决于异常类型。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69913445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档