簡體   English   中英

如何將 map 左連接表添加到 JOOQ 中的嵌套對象

[英]How to map left-joined tables to nested objects in JOOQ

我想左連接兩個表,然后將 map 連接到以下 object 中,如果沒有連接元數據,其中元數據 object 應該是 null:

data class ObjectDto(
   val objectId: String,
   val name: String,
   val metadata: MetadataDto?
)

data class MetadataDto(
   val description: String,
   val comment: String
)

我試圖按照有關嵌套對象的文檔進行操作,但無法使用以下代碼正確地對其進行 map:

    suspend fun getArrangements(objectIds: List<String>): List<ObjectDto> {
        return Flux.from(
            jooqDsl
                .select(
                    OBJECT.OBJECT_ID,
                    OBJECT.NAME,
                    row(
                        METADATA.DESCRIPTION,
                        METADATA.COMMENT,

                    ).mapping(::MetadataDto).`as`("METADATA")
                )
                .from(
                    OBJECT.leftJoin(METADATA)
                        .on(OBJECT.OBJECT_ID.eq(METADATA.OBJECT_ID))
                )
                .where(OBJECT.OBJECT_ID.`in`(objectIds))
        )
            .map {
                it.into(ObjectDto::class.java)
            }
            .collectList()
            .awaitSingle()
    }

執行的查詢返回正確的數據,但元數據未映射且始終為 null。我做錯了什么?

它看起來像一個錯誤: https://github.com/jOOQ/jOOQ/issues/14541 看到當時 3.17.7 是最新版本,似乎沒有涵蓋頂級嵌套記錄的集成測試,所以我預計此功能根本不適用於 R2DBC 支持的查詢。 該問題已在 3.17.8 和 3.18.0 中修復

解決方法是在 Flux.map 內部以編程方式處理Flux.map事物(不要調用it.into(...)而是使用Records.mapping()Record4<T1, T2, T3, T4>類型安全映射到隨便)而不使用row()運算符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM