首页 > 解决方案 > 从字符串到列表的 jOOQ 转换器在科特林

问题描述

我正在处理一种罕见的情况,我发现将 JSON 存储在 RDBMS 字段中是可以接受的。JSON 文档是一个数组或键值对象。

因此,jOOQ 转换器从 转换StringList<MyType>. 我在 Kotlin 中这样做,这就是乐趣的开始——使用泛型。

转换器

@Suppress("UNCHECKED_CAST")
class MyTypeListConverter :
    AbstractConverter<String, List<MyType>>(String::class.java, List::class.java as Class<List<MyType>>) {...}

发电机配置

database {
    inputSchema = "PUBLIC"
    includes = ".*"
    recordVersionFields = "(version|VERSION)"
    customTypes {
        customType {
            name = "MyTypeListConverter"
            type = "java.util.List<mypackage.MyType>"
            converter = "mypackage.MyTypeListConverter"
        }
    }
    forcedTypes {
        forcedType {
            name = "MyTypeListConverter"
            expression = ".*Event\\.MYFIELD"
            types = ".*"
            converter = "mypackage.MyTypeListConverter"
        }
    }
}

生成的 jOOQ 代码

public final TableField<EventRecord, List<MyType>> MYFIELD = 
createField("TITLE", org.jooq.impl.SQLDataType.CLOB.nullable(false), this, "", new MyTypeListConverter());

问题

由于类型不兼容,生成的 jOOQ 代码无法编译。List<MyType>as 声明的与从方法推断的MYFIELD不兼容。List<? extends MyType>createField()

最终,这可能更多是关于 Java-Kotlin 泛型互操作性,而不是关于 jOOQ。错误消息中的? extends MyType不变量是可疑的。

标签: genericskotlinjooq

解决方案


推荐阅读