设置:
JOOQ 3.13.1 Professionaldialect ORACLE12C我们有两个同义词指向不同的表。
同义词:
TAB_CONFIGURATION指向一个表(TAB_.._01 .TAB_.._08)
TAB_CONFIGURATION_NEXT指向一个表(TAB_.._01 .TAB_.._08)
表:
TAB_CONFIGURATION_01
。。
TAB_CONFIGURATION_08
JOOQ代码生成器不为这两个同义词生成任何Java类(仅用于8个表)。我不知道为什么不。
JOOQ代码生成器可以处理Oracle同义词吗?
发布于 2020-05-01 08:04:14
同义词还不支持这种方式,如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中已经是现成的了。优点:如果需要,可以访问带有数字后缀的实际表,也可以访问视图。您可以在无需更改客户端代码的情况下更新数据库中的视图定义,即无需重新生成它(假设所有表都相同)。
解决办法: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代码。
https://stackoverflow.com/questions/61479687
复制相似问题