如何从 SQL 查询配置 jOOQ 可嵌入类型
How to configure jOOQ Embeddable Types from SQL Query
我们有一个数据库,里面有很多嵌入式类型。通常相同的嵌入类型在同一个 table 中出现多次。各个列遵循命名模式,因此使用 SQL 查询等可以轻松识别不同的出现。
配置 jOOQ 以便代码生成器映射这些嵌入式类型的最佳方法是什么?请注意,我们的真实数据库包含数百个 table,因此手动配置是不行的。
虚构的例子:
create table t(amount int, unit varchar2(4), amount_pend int, unit_pend varchar(4));
每个 table
多次重复使用相同的可嵌入对象
从 jOOQ 3.15 开始,每个 table 还不能多次引用相同的可嵌入类型。您只能从多个 table 中引用它,每个引用一次。
这显然应该得到解决。这似乎只是代码生成限制。我为此创建了一个功能请求:
https://github.com/jOOQ/jOOQ/issues/12608
从jOOQ 3.17开始,你可以声明:
<embeddables>
<embeddable>
<name>MONETARY_AMOUNT</name>
<referencingName>AMOUNT_WITH_UNIT</referencingName>
<tables>T/tables>
<fields>
<field><expression>AMOUNT</expression></field>
<field><expression>UNIT</expression></field>
</fields>
</embeddable>
<embeddable>
<name>MONETARY_AMOUNT</name>
<referencingName>AMOUNT_WITH_UNIT_PEND</referencingName>
<tables>T/tables>
<fields>
<field><name>AMOUNT</name><expression>AMOUNT_PEND</expression></field>
<field><name>UNIT</name><expression>UNIT_PEND</expression></field>
</fields>
</embeddable>
</embeddables>
目前,您必须生成 2 个不同的可嵌入类型,它们在名称或类型上不兼容,仅在结构上兼容。
动态生成代码生成配置
代码生成配置是 JAXB 注释的 API,恰好映射到:
- 行家:https://www.jooq.org/doc/latest/manual/code-generation/codegen-maven/
- 此 XSD(或更新版本)之后的独立 XML 文件:https://www.jooq.org/xsd/jooq-codegen-3.16.0.xsd
但您也可以自己以编程方式使用代码生成 API,从而动态生成配置元素:
- https://www.jooq.org/doc/latest/manual/code-generation/codegen-programmatic/
- 或者,因为它都是基于 XML,您可以使用 XSLT 生成配置
我们有一个数据库,里面有很多嵌入式类型。通常相同的嵌入类型在同一个 table 中出现多次。各个列遵循命名模式,因此使用 SQL 查询等可以轻松识别不同的出现。
配置 jOOQ 以便代码生成器映射这些嵌入式类型的最佳方法是什么?请注意,我们的真实数据库包含数百个 table,因此手动配置是不行的。
虚构的例子:
create table t(amount int, unit varchar2(4), amount_pend int, unit_pend varchar(4));
每个 table
多次重复使用相同的可嵌入对象从 jOOQ 3.15 开始,每个 table 还不能多次引用相同的可嵌入类型。您只能从多个 table 中引用它,每个引用一次。
这显然应该得到解决。这似乎只是代码生成限制。我为此创建了一个功能请求: https://github.com/jOOQ/jOOQ/issues/12608
从jOOQ 3.17开始,你可以声明:
<embeddables>
<embeddable>
<name>MONETARY_AMOUNT</name>
<referencingName>AMOUNT_WITH_UNIT</referencingName>
<tables>T/tables>
<fields>
<field><expression>AMOUNT</expression></field>
<field><expression>UNIT</expression></field>
</fields>
</embeddable>
<embeddable>
<name>MONETARY_AMOUNT</name>
<referencingName>AMOUNT_WITH_UNIT_PEND</referencingName>
<tables>T/tables>
<fields>
<field><name>AMOUNT</name><expression>AMOUNT_PEND</expression></field>
<field><name>UNIT</name><expression>UNIT_PEND</expression></field>
</fields>
</embeddable>
</embeddables>
目前,您必须生成 2 个不同的可嵌入类型,它们在名称或类型上不兼容,仅在结构上兼容。
动态生成代码生成配置
代码生成配置是 JAXB 注释的 API,恰好映射到:
- 行家:https://www.jooq.org/doc/latest/manual/code-generation/codegen-maven/
- 此 XSD(或更新版本)之后的独立 XML 文件:https://www.jooq.org/xsd/jooq-codegen-3.16.0.xsd
但您也可以自己以编程方式使用代码生成 API,从而动态生成配置元素:
- https://www.jooq.org/doc/latest/manual/code-generation/codegen-programmatic/
- 或者,因为它都是基于 XML,您可以使用 XSLT 生成配置