Não está documentado aqui https://www.jooq.org/doc/latest/manual/sql-execution/transaction-management/
Ele apenas mostra que uma exceção não capturada causará uma reversão.
O problema é que RollbackToSavepointStep
não é um Publisher
.
É possível fazer rollback programaticamente?
Se eu tentar dsl().rollback().executeAsync().await()
, obtenho:
DetachedException: Attempt to execute a blocking method (e.g. Query.execute() or ResultQuery.fetch()) when only an R2BDC ConnectionFactory was configured. jOOQ's RowCountQuery and ResultQuery extend Publisher, which allows for reactive streams implementations to subscribe to the results of a jOOQ query. Simply embed your query in the stream, e.g. using Flux.from(query). See also: https://www.jooq.org/doc/latest/manual/sql-execution/fetching/reactive-fetching/
Você pode usar a
ROLLBACK
declaração e executá-la reativa. Só não comexecuteAsync()
, que atualmente não tem nenhuma implementação apoiada por R2DBC como a exceção declara. Há uma solicitação de recurso para isso a partir do jOOQ 3.19:Em vez disso, você deve ser capaz de simplesmente escrever:
Observe que isso não funciona atualmente devido a este bug no jOOQ 3.19.18 e versões anteriores:
O
Rollback
tipo estende somenteQuery
, nãoRowCountQuery
, que é umPublisher<Integer>
. Dado que isso é apenas uma questão de especificação de API errada, faça isso, em vez disso, como uma solução alternativa: