【发布时间】:2020-01-04 15:59:15
【问题描述】:
JOOQ Transaction Management 文档在细节上略显简明。请帮我理解以下4种情况的区别:
DSLContext outer = DSL.using(jdbcConnection, SQLDialect.POSTGRES);
// case 1
outer.insertInto(someTable).set(...).execute();
outer.transaction(transactional ->
{
DSLContext inner = DSL.using(transactional);
// case 2
outer.insertInto(someTable).set(...).execute();
// case 3
inner.insertInto(someTable).set(...).execute();
inner.transaction(transactional2 ->
{
DSLContext inner2 = DSL.using(transactional2);
// case 4
inner2.insertInto(someTable).set(...).execute();
}
});
我的猜测是:
- 案例 1 针对自动提交事务运行。
- 案例 2 与案例 1 相同,尽管它位于
TransactionalRunnable块内,因为它不使用transactional。 - 案例 3 针对不自动提交且独立于案例 1 或 2 使用的事务的事务运行。
- 案例 4 针对不自动提交的事务运行,并且嵌套在案例 3 使用的事务中。
这对吗?
【问题讨论】: