gpt4 book ai didi

java - DELETE .. RETURNING rowid 在 JOOQ 不工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:11:57 26 4
gpt4 key购买 nike

我有一个 oracle 数据库,我试图根据客户编号删除一条记录,查询返回已删除记录的 rowid。执行查询时,出现以下异常:java.lang.IllegalArgumentException:字段 (rowid) 不包含在行中。如果我尝试返回一个不同的字段(例如 client_number 字段本身)而不是 rowid,查询将完美运行。

我尝试执行的查询如下所示:

ClientDetails clt = CLIENT_DETAILS.as("clt");

ClientDetailsRecord result = context.deleteFrom(clt)
.where(clt.CLIENT_NUMBER.equal(clientNumber))
.returning(rowid())
.fetchOne();

这是 Jooq 的限制,还是我做错了?

最佳答案

这是 jOOQ 3.x 的一个已知(不幸的)限制,它只能返回表的声明列 CLIENT_DETAILS,没有像 ROWID 这样的“系统”列或与此相关的任何表达方式。纠正此问题的相关功能请求是:https://github.com/jOOQ/jOOQ/issues/5622

您可以通过创建自己的 CLIENT_DETAILS 表来解决此限制,该表包含一个“合成”ROWID 列,例如通过:

  • 扩展 CustomTable type
  • 通过将 ROWID 列添加到您的 CLIENT_DETAILS 表来扩展代码生成器(注意这可能会产生不良副作用,例如调用 UpdatableRecord.store 时())

关于java - DELETE .. RETURNING rowid 在 JOOQ 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43249129/

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