jOOQ forcedType 是必须在 java 代码中使用 postgres 枚举的吗?



我有一个以jooq作为DAO的弹簧启动应用程序。

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

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

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

然后我运行代码生成。这是InventoryMembershippojo。请注意Role role字段。

public class InventoryMembership implements Serializable {
private static final long serialVersionUID = 632233638;
private Integer userId;
private Integer inventoryId;
private Role    role;
...
}

但是,如果我在pom.xml中运行没有<forcedTypes>块的代码生成,我会得到Object role,这不好。

public class InventoryMembership implements Serializable {
private static final long serialVersionUID = -1258093557;
private Integer userId;
private Integer inventoryId;
private Object  role;
...
}

似乎<forceTypes>块是必须的。但是,在这个例子中,pom.xml中没有<forceTypes>块,但生成的代码会自动使用生成的枚举,而不是使用Object

这仅仅是由于不同的jooq版本吗?我的项目使用 3.12.1,而示例项目使用 3.13。还是因为别的什么?

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

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

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

相关内容

  • 没有找到相关文章

最新更新