【问题标题】:Jooq text array generated as object arrayJooq 文本数组生成为对象数组
【发布时间】:2020-09-15 01:11:56
【问题描述】:

给定以下 sql

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

并指示代码生成器使用 DDLDatabase 生成的item的形式是

    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>

提前谢谢你

【问题讨论】:

  • 您使用的是什么数据库产品,您的代码生成器配置是什么?
  • @LukasEder 我用你的问题更新了问题

标签: sql types jooq jooq-codegen-maven


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多