Я хотел бы сделать наши записи JOOQ более безопасными. Например, я бы хотел, чтобы поля BIGINT
CUSTOMER.ID
и ORDER.CUSTOMER_ID
имели тип CustomerNo
, а не просто Long
.
Я могу заставить генератор кода JOOQ генерировать правильные поля, используя комбинацию customType
forcedType
:
public final TableField<CustomerRecord, CustomerNo> ID =
createField("ID", SQLDataType.BIGINT.asConvertedDataType(new CustomerNoConverter()), this);
public final TableField<OrderRecord, CustomerNo> CUSTOMER_ID =
createField("CUSTOMER_ID", SQLDataType.BIGINT.asConvertedDataType(new CustomerNoConverter()), this);
Однако этого недостаточно. Для каждого первичного ключа с одним полем типа Long
мне нужно создать два класса, то есть эквиваленты CustomerNo
и CustomerNoConverter
. Конечно, наиболее удобный способ сделать это - использовать метамодель JOOQ, чтобы перебрать любые такие поля и сгенерировать код для каждого из них.
Поскольку сама модель JOOQ зависит от классов, которые должны быть сгенерированы, мне нужно будет подключиться к генератору кода JOOQ. Однако мне не удалось найти подходящий механизм обратного вызова для этой задачи. Как я мог подойти к этой проблеме?