是否可以在 jOOQ 中设置自定义类型,不仅基于列名或数据类型,还基于 table 名称?

Is it possible to set a custom type in jOOQ not only based on the column name or data type, but on the table name?

我有一个项目在数据库中的 ID 类似于 FOO_ID(对于 table FOO)。我发现在 Java 中定义一个名为 FooId 的小 class 包装实际值很方便,并将 FOO_ID 列的类型映射到 [=30 中的 FooId =].这样可以进行更好的类型检查,因为我不会不小心将 "foo id" 写入 "bar id" 列而编译器不会给我一个错误。

在新项目中,所有 ID 列在每个 table 中简称为 ID。我无法更改数据库架构,唉,这是我无法控制的。我希望 <forcedType> 能够匹配 "column named 'ID' in table named 'FOO'",但现在我不知道该怎么做,我认为这是不可能的。

除了列名之外,是否可以根据 table 名称来约束 <forcedType>?如果是这样,语法是什么?

提前致谢!

现有功能请求

这个想法已经在 jOOQ mailing list a couple of times and there's also a pending feature request that will add support for a special generated key type: #6124 上讨论过。

除了您建议的以外,外键类型还应与其引用的主键类型相匹配。这些类型的挑战在于使其适用于所有边缘情况,包括:

  • 复合键
  • 唯一键(在很多数据库中也可以被外键引用)
  • 参与多个唯一键/外键的列

虽然这当然是一个有趣的功能,但它在 jOOQ 3.9 中尚不可用。

解决方法

您可以通过以下方式自行解决此限制:

  • 扩展 JavaGenerator 以便为每个主键/外键生成您自己的类型
  • 使用 <forcedType/> 将所有单列键类型替换为您自己生成的类型

最好使用编程代码生成配置来完成此操作 - 否则您需要输入很多 XML(当然,您也可以使用 XSLT 来生成配置)。