在生成的 jOOQ 记录中包含 rowid

Include rowid in generated jOOQ Record

我将 jOOQ 与 Oracle DB 一起使用,需要获取记录的 rowid。

是否可以在生成的 jOOq 记录中包含 rowid?

jOOQ 3.12 中的可用功能

jOOQ 3.12 引入了 Table.rowid() with #7885,因此,有必要的基础设施来做你想做的事。然而,现在(从 jOOQ 3.12 开始),没有办法向代码生成器或 UpdatableRecord 通常指示存在这样一个人工的 ROWID 列。待处理的功能请求包括:

  • #6168 添加设置以使用 Table.rowid() 而不是主键
  • 来执行 UpdatableRecord 操作
  • #8388 添加代码生成选项使所有记录成为可更新记录

解决方法

根据您要执行的操作,您可以在 1:1 基础上编写表示表的视图,将 ROWID 列添加到每一行。使用 syntheticPrimaryKeys 和其他代码生成选项,您可以使这些视图再次看起来像代码生成器的基表。

您还可以扩展 jOOQ-meta 中的 类 以在每个生成的记录上生成合成的 ROWID 列,如果需要,使用 overridePrimaryKeys 来告诉代码ROWID 是主键的生成器,而不是实际的主键,如果这是你想要的。当然,你必须确保你永远不会写那个专栏...

除此之外,您可以在所有手动构建的查询中手动获取 Table.rowid()。不过,它们将与您的 UpdatableRecord 实例分开。您可以使用 ResultQuery.fetchMap() 方法来生成 rowid 和记录之间的映射。