JOOQ基于现有类创建表?

时间:2015-09-02 19:20:52

标签: java sql database 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数据库。

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

1 个答案:

答案 0 :(得分:2)

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

文档描述了:

  目前,jOOQ的DDL支持仍然非常有限。从长远来看,jOOQ将支持频繁的非正式数据库迁移的最重要的语句类型。请注意,jOOQ的目标不是替换现有的数据库迁移框架。在Data Geekery,我们通常建议使用Flyway进行迁移。有关更多信息,请参阅有关在Flyway中使用jOOQ的教程。