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

时间:2017-06-03 08:59:03

标签: java sql jooq

我在数据库中有一个名为FOO_ID的ID的项目(对于表FOO)。我发现在Java中定义一个名为FooId的小类包装实际值很方便,并将FOO_ID列的类型映射到Java中的FooId。这样可以更好地进行类型检查,因为我不会在编译器给出错误的情况下不小心将“foo id”写入“bar id”列。

在新项目中,所有ID列在每个表中都被称为ID。我无法更改数据库架构,这是我的唉。我希望<forcedType>能够在名为'FOO'的表中匹配“名为'ID'的列,但是现在我看不出怎么做,我认为不可能。

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

现有功能请求

这个想法已经在jOOQ mailing list上讨论了几次,并且还有一个待处理的功能请求,它会添加对特殊生成密钥类型的支持:#6124

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

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

虽然这肯定是一个有趣的功能,但它尚未在jOOQ 3.9中提供。

解决方法

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

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

最好通过使用程序代码生成配置来完成 - 否则你会输入相当多的XML(当然,你也可以使用XSLT来生成配置)。