Я создал JOOQ-скрипт, который выполняется Flyway для создания таблицы с одним перечислением. Когда схема генерируется для запуска экземпляра PostgresSQL, генерируемая информация перечисления POJOS теряется, и поле представляет собой просто строку.
sl.alterTable("tableName").addColumn("column", SQLDataType.VARCHAR.asEnumDataType(MyEnum.class)).execute();
// ...
enum MyEnum implements EnumType {
A("A"),
B("B");
private final String literal;
MyEnum(String literal) {
this.literal = literal;
}
@Override
public String getLiteral() {
return literal;
}
@Override
public String getName() {
return V2020_01_09__table_constant.State.class.getName().toLowerCase();
}
}
Чтобы сгенерировать enum в Java из PostgresSQL базы данных, мне нужно сделать следующий хак и выделить guish диалект БД. Поэтому мне нужно обрабатывать перечисления особым образом для каждой миграции.
if (dsl.dialect().equals(SQLDialect.POSTGRES)) {
dsl.createType("MyEnum").asEnum("a", "b").execute();
dsl.alterTable("tableName").addColumn("column", new DefaultDataType<>(null, MyEnum.class, "myenum")).execute();
} else {
dsl.alterTable("tableName").addColumn("column", SQLDataType.VARCHAR.asEnumDataType(MyEnum.class)).execute();
}
Наконец, я заменил H2, который поддерживает перечисления, и все выглядит хорошо. У меня есть enum в Java POJOS. Но производственная база данных, которая может работать на PostgresSQL, все еще получает типы varchars.
Есть ли способ, как сгенерировать PostgresSQL схему с перечислениями без явного указания создать мой тип перечисления?