【发布时间】: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 中没有 <forcedTypes> 块的情况下运行 codegen,我会得到 Object role,这不好。
public class InventoryMembership implements Serializable {
private static final long serialVersionUID = -1258093557;
private Integer userId;
private Integer inventoryId;
private Object role;
...
}
似乎<forceTypes> 块是必须的。但是在this example中,pom.xml中没有<forceTypes>块,但是生成的代码会自动使用生成的枚举,而不是使用Object。
仅仅是因为jooq版本不同吗?我的项目使用 3.12.1 而示例项目使用 3.13。还是因为别的原因?
谢谢。我的项目已准备好在https://github.com/ocdexperience/sbjooqflyway-poc 中运行。
【问题讨论】: