Hey, I have a Ktor application that uses Exposed R...
# exposed
s
Hey, I have a Ktor application that uses Exposed R2DBC to manage my database. Here’s what my database setup looks like:
Copy code
val database = R2dbcDatabase.connect(
    Config.get().database.url,
    user = Config.get().database.user,
    password = Config.get().database.password,
)

class SQLDatabase : Database {
    init {
        TransactionManager.defaultDatabase = database
    }
}

suspend fun <T> newSuspendingTransactionAsync(
    transaction: suspend Transaction.() -> T
): T = suspendTransaction(database) { transaction() }
I use it like this in my service:
Copy code
suspend fun getProviderById(id: String): Provider? =
    newSuspendingTransactionAsync {
        Provider.Schema
            .selectAll()
            .where { Provider.Schema.id eq id }
            .firstOrNull()
            ?.toProvider()
    }
And this is my Ktor route:
Copy code
get("{id}") {
    val id = call.parameters["id"]
    if (id == null) {
        call.respond(HttpStatusCode.BadRequest, mapOf("response" to "Provider ID is required"))
        return@get
    }

    val provider = ProviderService.getProviderById(id).await()

    if (provider == null) {
        call.respond(HttpStatusCode.NotFound, mapOf("response" to "Provider not found"))
        return@get
    }

    call.respond(HttpStatusCode.OK, provider)
}
When I call this endpoint, I get the following error:
Copy code
2025-10-25 17:40:27.391 [reactor-tcp-epoll-3] WARN  o.m.r2dbc.message.server.ErrorPacket - Error: 'Transaction characteristics can't be changed while a transaction is in progress' sqlState='25001' code=1568 
2025-10-25 17:40:27.393 [reactor-tcp-epoll-3] ERROR Application - Unhandled: GET - /api/v1/provider/sayanserver
java.lang.IllegalStateException: No transaction in context.
    at org.jetbrains.exposed.v1.core.transactions.CoreTransactionManager.currentTransaction(CoreTransactionManager.kt:96)
    at org.jetbrains.exposed.v1.core.vendors.DatabaseDialectKt.getCurrentDialect(DatabaseDialect.kt:169)
    at org.jetbrains.exposed.v1.r2dbc.statements.R2dbcConnectionImpl.r2dbcPreparedSql(R2dbcConnectionImpl.kt:127)
    ...