2015-09-02 48 views
3

按啓動說明我是能夠成功地生成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數據庫。

有沒有辦法在一次性命令中創建一個表或者甚至是整個數據庫?它似乎應該基於提供的內容。

回答

2

據我所知,只有發出手動DDL命令,如文檔描述posibility:ddl statements

的文檔描述了:

jOOQ的DDL支持目前仍然非常有限。從長遠來看,儘管如此,jOOQ將支持頻繁的非正式數據庫遷移的最重要的語句類型。請注意,jOOQ不會旨在替換現有的數據庫遷移框架。在Data Geekery,我們通常推薦使用Flyway進行遷移。另請參閱有關使用帶Flyway的jOOQ獲取更多信息的教程。

+0

謝謝。這幫助我知道我是否在黑暗中與這個想法相撞。在時間限制結束後我會接受你的回答。 – Pipsqweek

+0

您可以檢查表是否存在,然後使用jooq從類路徑資源執行DDL或準備好的腳本。數據庫創建是一項簡單的任務,但版本之間的遷移要困難得多(數據遷移,類型對話等) –