java - JOOQ如何启动事务和回滚?

标签 java sql transactions jooq

是的!我已经阅读了有关

的文档
  • jOOQ will never commit or rollback on the Connection (Except for CSV-imports, if explicitly configured in the Import API)
  • jOOQ will never start any transactions.
  • ...

但是当我需要一些事务管理时,最佳做法是什么?

我说过我是 JOOQ 方式的忠实粉丝吗?

最佳答案

这个问题是在 jOOQ 尚未实现事务 API 时提出的。从 jOOQ 3.4 开始,这样的 API 可用并记录在此处:

https://www.jooq.org/doc/latest/manual/sql-execution/transaction-management

事务 API 及其与 JDBC 的默认绑定(bind)

默认情况下,jOOQ 通过一个简单的函数式 API 将其(嵌套的)事务支持直接绑定(bind)到 JDBC API:

DSL.using(configuration)
   .transaction(c -> {
        c.dsl().insertInto(...).execute();
        c.dsl().update(...).execute();
   });

... lambda 表达式(或更具体地说,TransactionalRunnable)在其开头创建一个新事务并在正常完成时提交它,或在异常时回滚它。

这样的事务可以嵌套

DSL.using(configuration)
   .transaction(c1 -> {
        c1.dsl().insertInto(...).execute();
        c1.dsl().transaction(c2 -> {
            c2.dsl().insertInto(...).execute();
        });
        c1.dsl().update(...).execute();
   });

... 如果是 Savepoint将在嵌套事务开始时创建,嵌套事务在正常完成时丢弃保存点,或在异常时回滚到它。

覆盖默认的 JDBC 绑定(bind)

在许多应用程序中,您已经有了一个预先存在的事务管理系统,例如JTA 或 Spring TX 或其他。在这种情况下,您可以:

  • 根本不使用 jOOQ 事务 API
  • 实现您自己的 TransactionProvider它实现了 begin()commit()rollback() 操作的语义,例如通过将它们绑定(bind)到 Spring。

关于java - JOOQ如何启动事务和回滚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15159842/

相关文章:

sql - 如何在 SQL Server 中使用预定义的特殊字符修剪字符串?

mysql - Sql select 一起删除

java - 在 Neo4j 中,默认隔离级别始终是 READ_COMMITTED 还是仅在使用 Java 扩展它时才出现这种情况?

spring - 如何在协程内处理 Spring 事务?

python - Redis:如何确保购物案例的并发性和原子性?

java - 为什么在 HashTable ADT 的实现中有一个嵌套类(来自教科书的代码)?

java - Spring 的 AspectJ NoSuchMethodError

Java,部分初始化对象利用的目的是什么

java - 如何在 jxpath 中实现昂贵的查询?

mysql - 子查询中存在的情况