jOOQ конвертер из строки в список <MyType>в Котлине - PullRequest
0 голосов
/ 02 мая 2019

Я работаю над редким случаем, когда нахождение 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 в сообщении об ошибке является подозрительным.

...