[英]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.