【问题标题】:JOOQ Create Table Based on Existing Class?JOOQ 基于现有类创建表?
【发布时间】:2015-11-28 10:48:41
【问题描述】:

根据启动说明,我能够在 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数据库。

有没有办法在一次性命令中创建一个表甚至整个数据库?似乎应该基于提供的内容。

【问题讨论】:

    标签: java sql database jooq


    【解决方案1】:

    据我所知,只能手动发出 DDL 命令,如文档中所述:ddl statements

    文档描述:

    jOOQ 的 DDL 支持目前仍然非常有限。不过,从长远来看,jOOQ 将支持最重要的语句类型,用于频繁的非正式数据库迁移。请注意,jOOQ 不会旨在取代现有的数据库迁移框架。在 Data Geekery,我们通常建议使用 Flyway 进行迁移。有关详细信息,另请参阅有关将 jOOQ 与 Flyway 结合使用的教程。

    【讨论】:

    • 谢谢。这有助于我了解我是否在黑暗中摸索这个想法。时间到了我会接受你的回答。
    • 您可以检查表是否存在,然后使用 jooq 从类路径资源中执行 DDL 或准备好的脚本。数据库创建是一项简单的任务,但版本之间的迁移要困难得多(数据迁移、类型转换等)
    猜你喜欢
    • 1970-01-01
    • 2015-01-30
    • 2011-12-20
    • 2021-02-02
    • 2011-12-07
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多