是否可以从jOOQ TransactionRunnable
或TransactionCallable
中访问基础JDBC连接?
我希望能够访问从连接中获得的PostgreSQL大对象API:
final LargeObjectManager manager = connection.unwrap(PGConnection.class).getLargeObjectAPI();
如果我打电话给ConnectionProvider
,你只能访问aquire()
,看起来我的LOB和我的语句的连接不一样。
答案 0 :(得分:3)
在jOOQ 3.7中,#4552已实施,允许通过ConnectionRunnable
访问Configuration
Connection
。例如:
DSL.using(configuration)
.transaction((Configuration c) -> {
DSL.using(c).connection(connection -> {
LargeObjectManager manager = connection.unwrap(PGConnection.class).getLargeObjectAPI();
// ...
});
});
为方便起见,此API将在内部调用acquire()
和release()
,因此以下解决方案相同但更详细:
DSL.using(configuration)
.transaction((Configuration c) -> {
Connection connection = c.connectionProvider().acquire();
try {
LargeObjectManager manager = connection.unwrap(PGConnection.class).getLargeObjectAPI();
// ...
}
finally {
c.connectionProvider().release(connection);
}
});
因为Connection
来自"交易" Configuration c
,您可以确定您将访问权限Connection
。即使你多次访问它,它也总是与jOOQ内部取代你自己的ConnectionProvider
替换DefaultConnectionProvider
作用于交易Connection