JOOQ Создать таблицу на основе существующего класса?

В соответствии с инструкциями по запуску мне удалось успешно сгенерировать классы таблиц в JOOQ, которые в конечном итоге выглядят так:

public class AgencyMeta extends TableImpl<AgencyMetaRecord> {

    private static final long serialVersionUID = 214852552;

    /**
     * The reference instance of <code>PUBLIC.AGENCY_META</code>
     */
    public static final AgencyMeta AGENCY_META = new AgencyMeta();

    /**
     * The class holding records for this type
     */
    @Override
    public Class<AgencyMetaRecord> getRecordType() {
        return AgencyMetaRecord.class;
    }

    /**
     * The column <code>PUBLIC.AGENCY_META.ID</code>.
     */
    public final TableField<AgencyMetaRecord, Long> ID = createField("ID", org.jooq.impl.SQLDataType.BIGINT.nullable(false).defaulted(true), this, "");

    /**
     * The column <code>PUBLIC.AGENCY_META.AGENCY_ID</code>.
     */
    public final TableField<AgencyMetaRecord, Long> AGENCY_ID = createField("AGENCY_ID", org.jooq.impl.SQLDataType.BIGINT.nullable(false), this, "");

    /**
     * The column <code>PUBLIC.AGENCY_META.KEY</code>.
     */
    public final TableField<AgencyMetaRecord, String> KEY = createField("KEY", org.jooq.impl.SQLDataType.VARCHAR.length(255).nullable(false), this, "");

    /**
     * The column <code>PUBLIC.AGENCY_META.VALUE</code>.
     */
    public final TableField<AgencyMetaRecord, String> VALUE = createField("VALUE", org.jooq.impl.SQLDataType.CLOB, this, "");

    /**
     * Create a <code>PUBLIC.AGENCY_META</code> table reference
     */
    public AgencyMeta() {
        this("AGENCY_META", null);
    }

    /**
     * Create an aliased <code>PUBLIC.AGENCY_META</code> table reference
     */
    public AgencyMeta(String alias) {
        this(alias, AGENCY_META);
    }

    private AgencyMeta(String alias, Table<AgencyMetaRecord> aliased) {
        this(alias, aliased, null);
    }

    private AgencyMeta(String alias, Table<AgencyMetaRecord> aliased, Field<?>[] parameters) {
        super(alias, Public.PUBLIC, aliased, parameters, "");
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Identity<AgencyMetaRecord, Long> getIdentity() {
        return Keys.IDENTITY_AGENCY_META;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public UniqueKey<AgencyMetaRecord> getPrimaryKey() {
        return Keys.CONSTRAINT_A0;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public List<UniqueKey<AgencyMetaRecord>> getKeys() {
        return Arrays.<UniqueKey<AgencyMetaRecord>>asList(Keys.CONSTRAINT_A0, Keys.CONSTRAINT_A0F);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public List<ForeignKey<AgencyMetaRecord, ?>> getReferences() {
        return Arrays.<ForeignKey<AgencyMetaRecord, ?>>asList(Keys.CONSTRAINT_A0FC);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public AgencyMeta as(String alias) {
        return new AgencyMeta(alias, this);
    }

    /**
     * Rename this table
     */
    public AgencyMeta rename(String name) {
        return new AgencyMeta(name, null);
    }
}

По-видимому, у него есть все ингредиенты для создания таблицы, и частично я могу сделать это следующим образом:

create.createTable(PRODUCT).column(PRODUCT.ID, SQLDataType.BIGINT.nullable(false).defaulted(true)).execute();

И так далее...

Когда программа запускается в первый раз, я хотел бы создать базу данных h2 на месте.

Есть ли способ создать таблицу или даже всю базу данных с помощью одной команды? Казалось бы, здесь следует исходить из того, что предоставляется.


person Pipsqweek    schedule 02.09.2015    source источник


Ответы (1)


Насколько мне известно, вручную можно запускать DDL-команды, как описано в документации: операторы ddl

В документации описано, что:

Поддержка DDL jOOQ в настоящее время все еще очень ограничена. Однако в долгосрочной перспективе jOOQ будет поддерживать наиболее важные типы операторов для частых неофициальных миграций баз данных. Обратите внимание, что jOOQ не стремится заменить существующие платформы миграции баз данных. В Data Geekery мы обычно рекомендуем использовать Flyway для миграции. См. также руководство по использованию jOOQ с Flyway для получения дополнительной информации.

person Maciej Stępyra    schedule 02.09.2015
comment
Спасибо. Это помогает мне понять, не блуждаю ли я в темноте с этой идеей. Я приму ваш ответ, когда срок истечет. - person Pipsqweek; 02.09.2015
comment
Вы можете проверить, существует ли таблица, а затем выполнить DDL или подготовленный скрипт из ресурсов пути к классам, используя jooq. Создание базы данных — простая задача, но миграция между версиями намного сложнее (миграция данных, преобразование типов и т. д.). - person Maciej Stępyra; 02.09.2015