ごとに1つのクラスを生成するほど多くのメモリを浪費しない、別の解決策を見つけましたKEY
。大まかに次のような単一のクラスを生成します。
public class References {
// First, initialise all unique keys
public static final UniqueKey<TAuthorRecord> SysPk_14655 =
createUniqueKey(TAuthor.T_AUTHOR, TAuthor.ID);
// Then initialise all foreign keys
public static final Reference<TBookRecord, TAuthorRecord> SysFk_14666 =
createReference(SysPk_14655, TBook.T_BOOK, TBook.AUTHOR_ID);
public static final Reference<TBookRecord, TAuthorRecord> SysFk_14667 =
createReference(SysPk_14655, TBook.T_BOOK, TBook.CO_AUTHOR_ID);
// Factory method for unique keys
protected static <R extends Record> UniqueKey<R>
createUniqueKey(Table<R> table, TableField<R, ?>... fields) {
// Factory method for foreign keys referencing unique keys
protected static <R extends Record, U extends Record> Reference<R, U>
createReference(UniqueKey<U> key, Table<R> table, TableField<R, ?>... fields) {
}
生成されたテーブルクラスの実際のテーブルは、上記のキーを参照して使用できます。BobGのコメントの1つで提案されているように、JPAアノテーションを調べました。しかし、私はそれらを説明するのに非常に役立つとは思いませんでした:
- マルチフィールドキー(
@IdClass
パラメーターとしてタイプが必要であり、そのタイプは避けたい)
- マルチフィールド参照(それを行う方法は?)
- 異なるキーを使用した、あるテーブルから別のテーブルへの複数の参照
- 主キーと多くのプロパティを共有する一意のキー。
確立されたフレームワークがたくさんあるので、なぜそのようなジェネレーターを作成する必要があるのかについてのコメントがいくつかありました。私はhttp://www.jooq.orgのためにこれを行っています。そして、jOOQは今日のデータベース抽象化の可能性のギャップを埋めていると感じています。