如何从 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,恰好映射到:

但您也可以自己以编程方式使用代码生成 API,从而动态生成配置元素: