如何用jOOQ创建含非空array(row)列的MyRecord并插入Trino
解决方案:给Trino的array(row)类型列设置值(Kotlin)
针对你遇到的Trino数据库array(row(id varchar, version varchar))类型列,结合jOOQ生成的MyRecord类,有以下几种方式在Kotlin中设置非空的categoryids值:
方式1:使用jOOQ生成的Row对应Record类(推荐)
如果jOOQ代码生成器为row类型生成了对应的Record类(比如CategoryIdRecord,包含id和version属性),可以直接构造该类的实例数组:
myRecord.apply { categoryids = arrayOf( CategoryIdRecord().apply { id = "category-1" version = "1.0" }, CategoryIdRecord().apply { id = "category-2" version = "2.0" } ) }
这种方式类型最安全,能避免字段顺序错误的问题。
方式2:使用基础Object数组构造Row元素
如果没有生成对应的Record类,可以直接用Object数组表示每个row的字段值,注意顺序必须和row定义的id varchar, version varchar完全一致:
myRecord.apply { categoryids = arrayOf( arrayOf("category-1", "1.0"), arrayOf("category-2", "2.0") ) }
方式3:使用jOOQ DSL构造Row元素
借助jOOQ的DSL.row()方法构造类型安全的row元素,再组成数组:
import org.jooq.DSL myRecord.apply { categoryids = arrayOf( DSL.row("category-1", "1.0"), DSL.row("category-2", "2.0") ) }
注意事项
- 无论哪种方式,都要保证row元素的字段顺序和数据库中定义的
row(id varchar, version varchar)完全匹配,否则会导致字段值错位。 - 以上构造的数组都能被jOOQ正确映射为Trino的
array(row(...))类型,直接用于insertInto操作即可。
内容的提问来源于stack exchange,提问作者Pablo Cavalieri
相关产品推荐
相关产品推荐

