假设我为JOOQ提供了一个自定义ConnectionProvider
,它恰好使用自动提交设置为false的连接池。
实现大致是:
@Override public Connection acquire() throws DataAccessException {
return pool.getConnection();
}
@Override public void release(Connection connection) throws DataAccessException {
connection.commit();
connection.close();
}
如何将两个jooq查询包装到一个事务中?
使用DefaultConnectionProvider很容易,因为只有一个连接-但是对于池,我不确定该怎么做。
使用jOOQ 3.4,已添加事务API以通过JDBC,Spring或JTA事务管理器进行抽象。该API可以与Java
8一起使用,例如:
DSL.using(configuration)
.transaction(ctx -> {
DSL.using(ctx)
.update(TABLE)
.set(TABLE.COL, newValue)
.where(...)
.execute();
});
或使用Java 8之前的语法
DSL.using(configuration)
.transaction(new TransactionRunnable() {
@Override
public void run(Configuration ctx) {
DSL.using(ctx)
.update(TABLE)
.set(TABLE.COL, newValue)
.where(...)
.execute();
}
});
这个想法是由lambda表达式(或匿名类)形成事务代码,该代码:
该org.jooq.TransactionProvider
SPI可用于覆盖默认行为,它通过JDBC使用实现嵌套事务Savepoints
。
当前文档显示了使用Spring进行事务处理时的示例:
这个例子实质上归结为使用Spring TransactionAwareDataSourceProxy
<!-- Using Apache DBCP as a connection pooling library.
Replace this with your preferred DataSource implementation -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
init-method="createDataSource" destroy-method="close">
<property name="driverClassName" value="org.h2.Driver" />
<property name="url" value="jdbc:h2:~/maven-test" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>
<!-- Using Spring JDBC for transaction management -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="transactionAwareDataSource"
class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
<constructor-arg ref="dataSource" />
</bean>
<!-- Bridging Spring JDBC data sources to jOOQ's ConnectionProvider -->
<bean class="org.jooq.impl.DataSourceConnectionProvider"
name="connectionProvider">
<constructor-arg ref="transactionAwareDataSource" />
</bean>
可以从GitHub获得运行示例:
尽管我个人不建议这样做,但是某些用户已经成功地用Guice替换了Spring
DI的一部分,并与Guice处理了交易。在此用例上,GitHub上还有一个经过集成测试的运行示例:
问题内容: 是否有人尝试过将JOOQ与Spring框架一起使用,还是我有新的突破? http://www.jooq.org 问题答案: 是的,有很多人(到目前为止)。jOOQ手册包括一个有关如何开始使用jOOQ,Spring,Spring- TX和BoneCP的教程: http://www.jooq.org/doc/latest/manual/getting-started/tutorials/j
我试图想象如何将jOOQ与桥牌表一起使用。假设你有 使用jOOQ映射此模式时,将有三个记录类,、和。 如果我想通过为TableA插入a记录来持久化,我应该首先创建并持久化TableB记录,然后为TableB分配行,然后手动添加TableBridge行吗?难道没有任何方法可以自动保存桥接表中的行吗?
数据库是PostgreSQL 10,JOOQ版本是3.10.8。 是我在JOOQ上做错了什么,还是这是一个问题,可能已经在一些新版本中修复了?
在我从在线材料中找到的以下jooq片段中,有一个从“jooq结束于此”到“流开始”的转换 这是否意味着SQL查询生成发生,直到取得()?之后stream()启动,一切都在java进程内存中 或者像active record DSL这样的java 8流和整个代码段是否转换为SQL查询,包括stream()部分? 这是因为我已经看到了示例,其中sortBy/group pingBy是在许多在线示例的流
我试图使用JOOQ连接到HSQLDB,但我失败了,这里是错误消息: 此查询也会在HSQLDB Manager上失败(与JOOQ代码生成器的错误相同): 此查询工作正常: 我认为问题出在“cc”限定符上(在查询返回的“CONSTRAINT_NAME”字段上),这是HSQLDB错误吗? 我正在使用: HSQLDB 2.3.1 JOOQ 3.2.3 谢谢Ciccio
在我的jOOQ配置文件中,我为日期字段定义了一个转换器,但是在forcedType的节中定义类型的条件时遇到了一些问题。 对于测试,我使用了表达式: 以及在类型上: 我希望匹配数据类型为DATE的所有列。取而代之的是,它不匹配任何一个列,除了一个类型为DATE的列之外,就像其他不匹配的列一样,但这个列的def:CURRENT DATE列似乎与此匹配。 为了让它工作,我必须使用: 有人能给我解释一下