Mar*_*ark 10 java sql transactions jooq
是! 我已经阅读了有关的文档
- jOOQ永远不会在Connection上提交或回滚(如果CSV导入除外,如果在Import API中明确配置)
- jOOQ永远不会开始任何交易.
- ...
但是当我需要一些交易管理时,最好的做法是什么?
我说过我是JOOQ方式的忠实粉丝吗?
Luk*_*der 12
在jOOQ尚未实现事务API的时候问了这个问题.从jOOQ 3.4开始,这样的API可用并在此处记录:
https://www.jooq.org/doc/latest/manual/sql-execution/transaction-management
默认情况下,jOOQ通过一个简单的功能API直接将其(嵌套)事务支持绑定到JDBC API:
DSL.using(configuration)
.transaction(c -> {
c.dsl().insertInto(...).execute();
c.dsl().update(...).execute();
});
Run Code Online (Sandbox Code Playgroud)
... lambda表达式(或更具体地说,是TransactionalRunnable)在其开头创建一个新事务,并在正常完成时提交它,或者在异常时将其回滚.
这种交易可以嵌套
DSL.using(configuration)
.transaction(c1 -> {
c1.dsl().insertInto(...).execute();
c1.dsl().transaction(c2 -> {
c2.dsl().insertInto(...).execute();
});
c1.dsl().update(...).execute();
});
Run Code Online (Sandbox Code Playgroud)
...如果Savepoint将在嵌套事务开始时创建一个,并且嵌套事务在正常完成时丢弃保存点,或者在异常时回滚到它.
在许多应用程序中,您已经拥有一个预先存在的事务管理系统,例如JTA或Spring TX或其他东西.在这种情况下,您可以:
TransactionProvider一个实现的语义begin(),commit()和rollback()操作,例如通过将它们结合到春天.