【问题标题】:Is jOOQ forcedTypes a must to use postgres enum in java code?jOOQ 强制类型是否必须在 Java 代码中使用 postgres 枚举?
【发布时间】:2020-02-14 00:00:56
【问题描述】:

我有一个使用 jooq 作为 DAO 的 Spring Boot 应用程序。

首先,我在 postgresql 中创建一个枚举类型role (code)

create type role as enum ('admin', 'user');

create table inventory_membership (
  user_id integer references user_profile (id),
  inventory_id integer references inventory (id),
  role role not null default 'user',
  primary key (user_id, inventory_id)
)

然后,由于我想在我的应用程序中使用 java 枚举 role,我将 pom.xml 配置为以下 (code):

<forcedTypes>
    <forcedType>
        <userType>com.ocdexperience.sbjooqflywaypoc.db.enums.Role</userType>
        <enumConverter>true</enumConverter>
        <includeExpression>role</includeExpression>
        <includeTypes>.*</includeTypes>
    </forcedType>
</forcedTypes>

然后我运行 codegen。这是InventoryMembership pojo。注意Role role 字段。

public class InventoryMembership implements Serializable {

    private static final long serialVersionUID = 632233638;

    private Integer userId;
    private Integer inventoryId;
    private Role    role;

    ...
}

但是,如果我在 pom.xml 中没有 &lt;forcedTypes&gt; 块的情况下运行 codegen,我会得到 Object role,这不好。

public class InventoryMembership implements Serializable {

    private static final long serialVersionUID = -1258093557;

    private Integer userId;
    private Integer inventoryId;
    private Object  role;

    ...
}

似乎&lt;forceTypes&gt; 块是必须的。但是在this example中,pom.xml中没有&lt;forceTypes&gt;块,但是生成的代码会自动使用生成的枚举,而不是使用Object

仅仅是因为jooq版本不同吗?我的项目使用 3.12.1 而示例项目使用 3.13。还是因为别的原因?

谢谢。我的项目已准备好在https://github.com/ocdexperience/sbjooqflyway-poc 中运行。

【问题讨论】:

    标签: java sql jooq


    【解决方案1】:

    jOOQ 可以开箱即用地从 PostgreSQL 数据库连接生成枚举类型。但是,问题是您使用的是org.jooq.meta.extensions.ddl.DDLDatabase,它会解析您的 SQL 并将其转换为幕后的 H2。 H2 在最近的版本中遇到了许多与枚举类型相关的问题,因为它们刚刚开始支持它们。目前,jOOQ 和 H2 仍然无法在 H2 的字典视图中生成枚举类型。一个相关的错误是这里的一个: https://github.com/jOOQ/jOOQ/issues/7917

    如果你想从 jOOQ 对 PostgreSQL 的原生枚举支持中获益,我建议改为连接到实际的 PostgreSQL 数据库来生成源代码。

    【讨论】:

    猜你喜欢
    • 2014-07-21
    • 2011-04-18
    • 1970-01-01
    • 2012-09-16
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多