如何从 SQL 查询配置 jOOQ 可嵌入类型
Posted
技术标签:
【中文标题】如何从 SQL 查询配置 jOOQ 可嵌入类型【英文标题】:How to configure jOOQ Embeddable Types from SQL Query 【发布时间】:2021-12-17 18:21:54 【问题描述】:我们有一个数据库,其中有很多嵌入式类型。通常相同的嵌入类型在同一个表中出现多次。各个列都遵循命名模式,因此可以使用 SQL 查询等轻松识别不同的出现。
配置 jOOQ 以便这些嵌入类型被代码生成器映射的最佳方式是什么?请注意,我们的真实数据库包含数百个表,因此手动配置是不行的。
虚构的例子:
create table t(amount int, unit varchar2(4), amount_pend int, unit_pend varchar(4));
【问题讨论】:
【参考方案1】:每个表多次重复使用相同的嵌入
从 jOOQ 3.15 开始,每个表还不能多次引用相同的可嵌入类型。您只能从多个表中引用它,每个表一次。
这显然应该得到解决。这似乎只是代码生成限制。我为此创建了一个功能请求: 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 来生成配置【讨论】:
谢谢。我会从这里关注这个问题。以上是关于如何从 SQL 查询配置 jOOQ 可嵌入类型的主要内容,如果未能解决你的问题,请参考以下文章
SQL 方言如何在 hibernate 和 JOOQ 等框架内部实际工作
如何使用 Spring-Boot config 配置 JOOQ 设置?