gpt4 book ai didi

kotlin - 使用 jOOQ 为键生成类

转载 作者:行者123 更新时间:2023-12-01 13:16:38 24 4
gpt4 key购买 nike

有时当函数有这样的签名时它会变得毛茸茸:

fun doStuff(firstKey: UUID, secondKey: UUID, ...)

对于编译器来说,所有 UUID 都是相同的,因此这里的问题有望在运行时被数据库捕获。

我喜欢 jOOQ 在编译时捕获许多问题的方式,我也想解决这个问题。我的目标是让每个表的每个键都有自己的类,并使用这些字段正确生成 pojo。

实现该目标的最佳方式是什么?我想出了以下内容:

  • 完整的 JavaGenerator 实现
  • Converters 具有大量强制类型映射和手动创建的关键类

有没有人有过类似的经验?

最佳答案

路线图上的 jOOQ 特性

您不是第一个有这个想法的人。有一个待处理的功能请求可以开箱即用地生成此类“ key 包装器”类(在 3.11 中尚不可用): https://github.com/jOOQ/jOOQ/issues/6124

或者这个讨论: https://groups.google.com/forum/#!topic/jooq-user/53RZqoewa3g

对于此功能,您还有其他应用程序。一旦存在此类类型:

  • 您只能通过匹配主键/外键来加入,因为它们将不再由任意数字类型建模
  • 在连接或过滤时不可能忘记组合键中的一列,因为组合键将成为一个值

复合键的情况让 jOOQ 难以支持开箱即用,因为需要首先实现各种附加功能,以便将多个列组合成一个合成列。此外,唯一键和外键都可以重叠,因此必须考虑很多边缘情况。

自己实现

您可以自己实现。如果您的架构只有单列代理键,那么您可以覆盖 JavaGenerator 类并为每个表生成一个额外的类,并添加相关的 forcedType 配置和 Converter 以编程方式实现代码生成器配置。

其他人可能已经做过类似的事情,但我不知道有任何公开可用的实现。

在数据库中实现

原则上,你也可以直接在数据库中实现,例如如果您使用的是 PostgreSQL。您可以将 UUID 包装在复合类型中并将其用于您的主键/外键:

create type pk_a as (id bigint);
create type pk_b as (id bigint);

create table t_a(id pk_a primary key);
create table t_b(id pk_b primary key, a pk_a references t_a);

insert into t_a values(row(1)::pk_a);
insert into t_b values(row(2)::pk_b, row(1)::pk_a);

jOOQ 代码生成器应该选择这些类型并为您做正确的事情。当然,可能有很多注意事项,因为我几乎从未在野外看到过这种做法:-)

关于kotlin - 使用 jOOQ 为键生成类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54240062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com