Я нашел другое решение, не тратя впустую столько памяти, сколько генерация одного класса на 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) {
}
Фактические таблицы из сгенерированных классов таблиц могут затем ссылаться и использовать вышеупомянутые ключи. Я посмотрел аннотации JPA, как предложено BobG в одном из его комментариев. Но я не нашел их очень полезными для описания:
- Клавиши с несколькими полями (
@IdClass
нужен тип в качестве параметра, и я хочу избежать этого типа)
- Многополевые ссылки (как это сделать?)
- Несколько ссылок из одной таблицы в другую с использованием разных ключей
- Уникальные ключи, которые совместно используют многие свойства с первичным ключом.
В некоторых комментариях упоминалось, почему я должен создать такой генератор, потому что существует множество установленных фреймворков. Я делаю это для http://www.jooq.org. И я чувствую, что jOOQ восполняет пробел в сегодняшних возможностях абстрагирования базы данных.