使用Jasync

问题描述

使用JOOQ创建查询并使用Jasync执行查询时,如何将RowData返回到JOOQ记录中?

这是我的notransaction助手,它执行可暂停的非异步查询

    override suspend fun <T> notransaction(f: suspend (ConnectionPool<*>) -> T): T {
        val cdf = CompletableDeferred<T>()
        try {
            GlobalScope.launch {
                cdf.complete(f(connectionPool))
            }
        } catch (e: Throwable) {
            log.error(e.message ?: "",e)
            cdf.completeExceptionally(e)
        }
        return cdf.await()
    }

我定义了两个表及其相关记录:


class ListingRecord : Customrecord<ListingRecord>(listing)
class ListingTable : CustomTable<ListingRecord>(DSL.name("listing")) {

    val id: TableField<ListingRecord,UUID> = createField(DSL.name("id"),sqlDataType.UUID)
    val title: TableField<ListingRecord,String> = createField(DSL.name("title"),sqlDataType.VARCHAR)

    companion object {
        val listing = ListingTable()
    }

    override fun getrecordtype(): Class<out ListingRecord> {
        return ListingRecord::class.java
    }

}

class ListingImageRecord : Customrecord<ListingImageRecord>(listingImage)
class ListingImageTable : CustomTable<ListingImageRecord>(DSL.name("listing_image")) {

    val id: TableField<ListingImageRecord,sqlDataType.UUID)
    val name: TableField<ListingImageRecord,String> = createField(DSL.name("name"),sqlDataType.VARCHAR)
    val listingId: TableField<ListingImageRecord,UUID> = createField(DSL.name("listing"),sqlDataType.UUID)

    companion object {
        val listingImage = ListingImageTable()
    }

    override fun getrecordtype(): Class<out ListingImageRecord> {
        return ListingImageRecord::class.java
    }

}

生成SQL查询

    val dsl = DSL.using(sqlDialect.POSTGRES)
    val query = dsl.select(
        listing.id,listing.title,listingImage.id,listingImage.listingId
    ).from(listing).leftJoin(listingImage).on(listing.id.eq(listingImage.listingId))

enter image description here

如何将RowData映射回JOOQ? 有什么方法可以获取select语句中的列及其索引的映射 或其他方法将结果映射回去? 我假设我需要以某种方式将其映射回Record,以便可以

listing.id.get(ListingRecord)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)