如何从交易中返回多个值?

时间:2019-08-02 04:55:50

标签: jooq

是否可以针对同一笔交易多次调用DSLContext.transactionResult()

我想在同一事务中的不同表中插入行,并将主键返回到封闭的(非事务性)代码块。

我知道我可能可以创建一些自定义返回类型来保存多个值,但是从代码可读性的角度来看,最好多次调用DSLContext.transactionResult()并每次传递一个单独的结果。

2 个答案:

答案 0 :(得分:1)

DSLContext.transactionResult()调用的callable代表事务,并在事务完成后使用从TransactionProvider获得的Configuration#transactionProvider()进行提交或回滚。

但是事务可以嵌套(请参见documentation中的示例)。因此,如果您有外部事务(再次使用DSLContext.transactionResult()),则可以为要插入其中的每个表进行嵌套事务,并可能以这种方式实现目标。

答案 1 :(得分:0)

我同意Knut's answer。一个简单的例子是:

config.omniauth :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET'], token_params: { parse: :json }