Функция jOOQ на дорожной карте
Ты не первый с этой идеей. Существует ожидающий запрос функции для генерации таких классов «оболочки ключей» из коробки (пока не доступно в 3.11):
https://github.com/jOOQ/jOOQ/issues/6124
Или это обсуждение:
https://groups.google.com/forum/#!topic/jooq-user/53RZqoewa3g
У вас есть дополнительные приложения для этой функции. Когда такие типы существуют:
- Вы можете присоединиться только путем сопоставления первичных ключей / внешних ключей, поскольку они больше не будут моделироваться произвольными числовыми типами
- Невозможно забыть столбец в составном ключе при объединении или фильтрации, так как составной ключ станет одним значением
Сложный ключевой случай - тот, который делает это сложным для поддержки jOOQ из коробки, так как сначала необходимо реализовать множество дополнительных функций, чтобы сгруппировать несколько столбцов в синтетический столбец. Кроме того, как уникальные ключи, так и внешние ключи могут накладываться друг на друга, поэтому необходимо учитывать несколько крайних случаев.
Реализация самостоятельно
Вы можете реализовать это самостоятельно. Если ваша схема имеет только суррогатные ключи из одного столбца, вы можете переопределить класс JavaGenerator
и сгенерировать дополнительный класс для каждой таблицы, а также программно добавить соответствующие конфигурации forcedType
и Converter
в конфигурацию генератора кода.
Другие, возможно, сделали что-то подобное, но я не знаю ни о какой общедоступной реализации.
Реализация его в базе данных
В принципе, вы также можете напрямую реализовать это в базе данных, например, если вы используете PostgreSQL. Вы можете обернуть ваш UUID в составной тип и использовать его для своих первичных ключей / внешних ключей:
create type pk_a as (id bigint);
create type pk_b as (id bigint);
create table t_a(id pk_a primary key);
create table t_b(id pk_b primary key, a pk_a references t_a);
insert into t_a values(row(1)::pk_a);
insert into t_b values(row(2)::pk_b, row(1)::pk_a);
Генератор кода jOOQ должен подобрать эти типы и сделать то, что вам нужно. Конечно, есть довольно много предостережений, учитывая, что я почти никогда не видел эту практику в дикой природе: -)