Синонимы пока не поддерживаются таким образом, начиная с jOOQ 3.13
Это действительно было бы полезно, однако, оно еще не реализовано в jOOQ с 3.13: https://github.com/jOOQ/jOOQ/issues/1563.
Oracle не сообщает синонимы как обычные таблицы через словарные представления, такие как SYS.ALL_TABLES
или SYS.ALL_TAB_COLS
, поэтому не так просто обнаружить синонимы, как обычные таблицы, включая:
- Информация о таблице
- Информация о столбце
- Информация об ограничении
Вся эта информация должна быть обнаружена путем рекурсивного обхода графа, представленного в SYS.ALL_SYNONYMS
.
Однако, начиная с jOOQ 3.13, SYS.ALL_SYNONYMS
подвергается тщательному анализу, когда процедуры / пакеты ссылаются на типы данных через синонимы, в случае если синонимы преобразуются в фактический тип данных.
Обходной путь: Представления
Вы можете использовать представления вместо синонимов. В большинстве случаев это работает точно так же, как и для таблиц псевдонимов.
Итак, если у вас есть:
CREATE TABLE tab_configuration_01 (...);
CREATE TABLE tab_configuration_02 (...);
...
CREATE TABLE tab_configuration_08 (...);
Вместо определения:
CREATE SYNONYM tab_configuration FOR tab_configuration_02;
CREATE SYNONYM tab_configuration_next FOR tab_configuration_03;
Вы также можете определить:
CREATE VIEW view_configuration AS SELECT * FROM tab_configuration_02;
CREATE VIEW view_configuration_next AS SELECT * FROM tab_configuration_03;
Это уже работает из коробки в jOOQ. Преимущество: Вы можете получить доступ как к фактическим таблицам с суффиксом цифра c, если хотите, так и к представлению. Вы можете обновить определение представления в базе данных, не изменяя свой клиентский код, т.е. без его регенерации (при условии, что все ваши таблицы одинаковы).
Обходной путь: стратегия генератора jOOQ
Вы можете определить сгенерированные имена классов и идентификаторов, используя «стратегии генераторов»:
Например:
<generator>
<strategy>
<matchers>
<tables>
<table>
<expression>TAB_CONFIGURATION_02</expression>
<tableClass>
<transform>PASCAL</transform>
<expression>TAB_CONFIGURATION</expression>
</tableClass>
<tableIdentifier>
<transform>AS_IS</transform>
<expression>TAB_CONFIGURATION</expression>
</tableIdentifier>
</table>
<table>
<expression>TAB_CONFIGURATION_03</expression>
<tableClass>
<transform>PASCAL</transform>
<expression>TAB_CONFIGURATION_NEXT</expression>
</tableClass>
<tableIdentifier>
<transform>AS_IS</transform>
<expression>TAB_CONFIGURATION_NEXT</expression>
</tableIdentifier>
</table>
</tables>
</matchers>
</strategy>
</generator>
Преимущество: вам не нужен новый объект базы данных для вашего "синонима". Но вы больше не можете ссылаться на исходные таблицы с нумерацией c из клиентского кода, потому что они могут быть переименованы во что-то другое. Кроме того, вы должны заново генерировать код jOOQ каждый раз, когда вы хотите изменить «синоним».