Я работаю над редким случаем, когда нахождение JSON в поле RDBMS приемлемо.Документ JSON представляет собой массив или объекты значения ключа.
Итак, jOOQ converter преобразует из String
в List<MyType>
.Я делаю это в Котлине, и вот тут начинается самое интересное - с генериками.
Конвертер
@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>
, как объявлено MYFIELD
, несовместимо с List<? extends MyType>
, что вытекает из метода createField()
.
В конечном счете, это может быть связано с совместимостью обобщений Java-Kotlin, а не с jOOQ.Инвариант ? extends MyType
в сообщении об ошибке является подозрительным.