没有函数的 DefaultTransactionProvider 的 JOOQ 交易
JOOQ transactions with DefaultTransactionProvider without functions
我知道我可以将 DefaultTransactionProvider
与 DSLContext
和像这样的 lambda 一起使用
DSL.using(configuration)
.transaction(ctx -> {
DSL.using(ctx)
.update(TABLE)
.set(TABLE.COL, newValue)
.where(...)
.execute();
});
但是我想在代码块的范围之外控制我的事务(但仍然使用 DefaultTransactionProvider
作为其带有检查点的行为,这就是我正在寻找的)。更多类似内容
configuration.transactionProvider().begin(transactionContext);
DSL.using(configuration)
.update(TABLE)
.set(TABLE.COL, newValue)
.where(...)
.execute();
configuration.transactionProvider().commit(transactionContext);
这可能吗?还是我需要自己实现事务 SPI 才能完成?
从 jOOQ 3.8 开始,开箱即用是不可能的。有一个待处理的功能请求:
https://github.com/jOOQ/jOOQ/issues/5376
您的代码可能会起作用:
configuration.transactionProvider().begin(transactionContext);
DSL.using(configuration)
.update(TABLE)...
configuration.transactionProvider().commit(transactionContext);
但请注意,您调用的是 SPI 方法,而不是 API 方法。这些方法不是为您作为 API 消费者直接访问而设计的。它们专为在 Configuration
中实施和注入 jOOQ SPI 上下文而设计。如果您想继续此路径,您的 TransactionProvider
将需要访问 Configuration.connectionProvider()
并修改其状态,以便始终生成正确的连接,直到 commit()
或 rollback()
被调用.
另请参阅 jOOQ 用户组的相关讨论:
https://groups.google.com/forum/#!msg/jooq-user/1JwWMChD2SM/NHUhSnI8AgAJ
我知道我可以将 DefaultTransactionProvider
与 DSLContext
和像这样的 lambda 一起使用
DSL.using(configuration)
.transaction(ctx -> {
DSL.using(ctx)
.update(TABLE)
.set(TABLE.COL, newValue)
.where(...)
.execute();
});
但是我想在代码块的范围之外控制我的事务(但仍然使用 DefaultTransactionProvider
作为其带有检查点的行为,这就是我正在寻找的)。更多类似内容
configuration.transactionProvider().begin(transactionContext);
DSL.using(configuration)
.update(TABLE)
.set(TABLE.COL, newValue)
.where(...)
.execute();
configuration.transactionProvider().commit(transactionContext);
这可能吗?还是我需要自己实现事务 SPI 才能完成?
从 jOOQ 3.8 开始,开箱即用是不可能的。有一个待处理的功能请求: https://github.com/jOOQ/jOOQ/issues/5376
您的代码可能会起作用:
configuration.transactionProvider().begin(transactionContext);
DSL.using(configuration)
.update(TABLE)...
configuration.transactionProvider().commit(transactionContext);
但请注意,您调用的是 SPI 方法,而不是 API 方法。这些方法不是为您作为 API 消费者直接访问而设计的。它们专为在 Configuration
中实施和注入 jOOQ SPI 上下文而设计。如果您想继续此路径,您的 TransactionProvider
将需要访问 Configuration.connectionProvider()
并修改其状态,以便始终生成正确的连接,直到 commit()
或 rollback()
被调用.
另请参阅 jOOQ 用户组的相关讨论: https://groups.google.com/forum/#!msg/jooq-user/1JwWMChD2SM/NHUhSnI8AgAJ