作为对象数组生成的 Jooq 文本数组

Jooq text array generated as object array

给出以下 sql

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

并指示代码生成器使用 DDLDatabase 生成的项目的形式为

    public final TableField<JSomethingRecord, Object[]> SOMETHING_

环顾文档,我找不到如何将其映射到 String[]。 同样适用于 varcharvarchar(255)。 我不必在这里使用强制类型,因为至少三个中的一个应该是有效的数据类型 而不是像 UUID 那样回退到 OTHER(我看到有一个强制类型的例子)

我是在做/理解错了什么,还是这是一种预期的行为?

我使用的数据库是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>

提前致谢

从 jOOQ 3.13 开始,DDLDatabase 还不支持 PostgreSQL 的类型化数组,因为 DDLDatabase 的当前实现在幕后将您的 DDL 转换为 H2,而 H2 1.4.200 的ARRAY 类型不支持除 Object[].

之外的任何其他类型的数组

这将在未来发生变化,如:

  1. H2 1.4.201 将支持像 PostgreSQL 这样的类型化数组:https://github.com/h2database/h2database/issues/1390
  2. jOOQ 将在测试容器中的实际 PostgreSQL 数据库上支持 运行 您的 DDL:https://github.com/jOOQ/jOOQ/issues/6551
  3. jOOQ 将支持在第三方数据库产品上解释 DDL 而不是 运行:https://github.com/jOOQ/jOOQ/issues/7034

到那时,为了使用此类 PostgreSQL 特有的功能,我建议使用连接到实际 PostgreSQL 数据库实例的经典方法。