Transaction rollback does not seem to work when using r2dbc and jOOQ
DemoRepository
suspend fun insert(id: String) {
if (id == "b") {
throw RuntimeException("error while inserting")
}
db.insertInto(DEMO_TABLE)
.set(DEMO_TABLE.ID, id)
.awaitSingle()
}
DemoService
suspend fun addRecords(): Unit = transactionalOperator.executeAndAwait {
log.info("Inserting records")
repo.insert("a")
repo.insert("b") // throws error
}
and then
repo.getAll() // returns ["a"] instead of []
Full code: https://github.com/linktosriram/r2dbc-jooq-rollback
Even-though the inserts are done within a transaction, it does not seem to be rolled back when an exception is thrown
Logs:
Executing query: BEGIN READ WRITE
Executing query: insert into demo_table (id) values ($1)
Executing query: ROLLBACK
Executing query: select demo_table.id from demo_table
When swapping jOOQ DSLContext to DatabaseClient the rollback works. Looks like a bug in jOOQ
suspend fun insert(id: String) {
if (id == "b") {
throw RuntimeException("error while inserting")
}
dbClient.sql("insert into demo_table (id) values ('$id')")
.fetch()
.awaitSingle()
}