【问题标题】:Include rowid in generated jOOQ Record在生成的 jOOQ 记录中包含 rowid
【发布时间】:2020-04-14 16:32:50
【问题描述】:

我正在使用 jOOQ 和 Oracle DB,需要获取记录的 rowid。

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

【问题讨论】:

    标签: java sql oracle jooq


    【解决方案1】:

    jOOQ 3.12 中的可用功能

    jOOQ 3.12 引入了 Table.rowid() 和 #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 和记录之间的映射。

    【讨论】:

    • 谢谢,我将尝试第二种解决方法,因为我使用记录创建视图的表(~1500)太多。
    • @SimonMartinelli:我想到了另一种解决方法,您可以扩展 jOOQ-meta 类以将 ROWID 信息添加到每个生成的记录中,见上文。
    • 啊,是的,我明白了。将不得不尝试。谢谢
    猜你喜欢
    • 2015-11-07
    • 2020-12-04
    • 2023-04-11
    • 2023-03-24
    • 2016-01-05
    • 1970-01-01
    • 2019-10-22
    • 2011-03-08
    • 2018-05-20
    相关资源
    最近更新 更多