Текстовый массив Jooq, созданный как массив объектов - PullRequest
1 голос
/ 27 мая 2020

с учетом следующего sql

create table something(
  id BIGSERIAL,
  something TEXT[] NOT NULL DEFAULT '{}',
  PRIMARY KEY (id)
);

и указания генератору кода использовать DDLDatabase сгенерированный элемент имеет форму

    public final TableField<JSomethingRecord, Object[]> SOMETHING_

Просматривая документацию, я не могу найдите, как это можно отобразить в String[]. то же самое касается varchar и varchar(255). Мне не нужно использовать принудительный тип здесь, поскольку по крайней мере один из трех должен быть допустимым типом данных, а не откатом на OTHER, как это происходит с UUID (для которого я видел пример для принудительных типов )

Я что-то делаю / понимаю неправильно или это ожидаемое поведение?

Я использую базу данных PostGres, а конфигурация генератора следующая

<generator>
    <database>
        <name>org.jooq.meta.extensions.ddl.DDLDatabase</name>
        <inputCatalog/>
        <inputSchema>PUBLIC</inputSchema>
        <properties>
            <property>
                <key>use-attribute-converters</key>
                <value>true</value>
            </property>
            <property>
                <key>scripts</key>
                <value>src/main/resources/db/migration/*</value>
            </property>
        </properties>
    </database>
    <target>
        <clean>true</clean>
        <packageName>my.other.package</packageName>
        <directory>target/generated-sources/jooq</directory>
    </target>
</generator>

Заранее спасибо

1 Ответ

0 голосов
/ 29 мая 2020

Начиная с jOOQ 3.13, типизированные массивы PostgreSQL еще не поддерживаются DDLDatabase, потому что текущая реализация DDLDatabase переводит ваш DDL в H2 за кулисами, а H2 1.4.200 ARRAY type не поддерживает массивы других типов, кроме Object[].

Это изменится в будущем, так как:

  1. H2 1.4.201 будет поддерживать типизированные массивы, такие как PostgreSQL: https://github.com/h2database/h2database/issues/1390
  2. jOOQ будет поддерживать запуск вашего DDL в реальной базе данных PostgreSQL в тестовых контейнерах: https://github.com/jOOQ/jOOQ/issues/6551
  3. jOOQ будет поддерживать интерпретацию DDL вместо запуска его на стороннем продукте базы данных: https://github.com/jOOQ/jOOQ/issues/7034

До тех пор, чтобы использовать такой PostgreSQL -specifi c , я рекомендую использовать подход classi c для подключения к фактическому экземпляру базы данных PostgreSQL.

...