从 jOOQ 3.13 开始,不支持同义词
这确实是一个有用的功能,但是,截至 3.13,它尚未在 jOOQ 中实现: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 中开箱即用。优点:如果需要,您可以访问带有数字后缀的实际表或视图。您可以更新数据库中的视图定义,而无需更改客户端代码,即无需重新生成它(假设所有表都相同)。
解决方法: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>
优势:您的“同义词”不需要新的数据库对象。但是您不能再从客户端代码中引用原始的数字后缀表,因为它们可能被重命名为其他东西。此外,每次要更改“同义词”时,都必须重新生成 jOOQ 代码。