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

问题描述 投票:1回答:1

给出以下sql

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

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

    public final TableField<JSomethingRecord, Object[]> SOMETHING_

在文档中环顾四周,我找不到如何在String[]中进行映射。varcharvarchar(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>

提前谢谢您

sql types jooq jooq-codegen-maven
1个回答
0
投票

从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数据库实例的经典方法。

© www.soinside.com 2019 - 2024. All rights reserved.