Есть ли правильный способ, как создать таблицу с перечислениями для всех диалектов с JOOQ? - PullRequest
0 голосов
/ 17 января 2020

Я создал 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 схему с перечислениями без явного указания создать мой тип перечисления?

1 Ответ

1 голос
/ 20 января 2020

Наконец, я заменил H2, который поддерживает перечисления, и все выглядит хорошо. У меня есть перечисление в Java POJOS.

В прошлый раз, когда я проверял, в реализации перечисления H2 все еще не хватало нескольких вещей, и мы пока не можем правильно перепроектировать их перечисления, так что это не будет работать хорошо.

Есть ли способ, как сгенерировать PostgresSQL схему с перечислениями без явного указания создать тип перечисления?

Не должно быть любая проблема с использованием перечислений в PostgreSQL, если вы подключаетесь к фактическому экземпляру базы данных для генерации кода. Я предлагаю исключить H2 из уравнения, если вы собираетесь использовать вендоры типа c, такие как enums, arrays, et c. Использование H2 будет просто причинять боль все время. Я предполагаю, что вы используете H2 для интеграционного тестирования. Я рекомендую использовать testcontainers с реальной базой данных PostgreSQL.

...