我有一个oracle数据库,我正在尝试删除基于客户端编号的记录,查询返回已删除记录的rowid。执行查询时,我收到以下异常:java.lang.IllegalArgumentException:字段(rowid)不包含在Row中。如果我尝试返回另一个字段(例如client_number字段本身)而不是rowid,则查询工作正常。
我尝试执行的查询如下所示:
ClientDetails clt = CLIENT_DETAILS.as("clt");
ClientDetailsRecord result = context.deleteFrom(clt)
.where(clt.CLIENT_NUMBER.equal(clientNumber))
.returning(rowid())
.fetchOne();
这是Jooq的限制,还是我做错了?
答案 0 :(得分:2)
这是jOOQ 3.x的已知(且不幸)限制,它只能返回表CLIENT_DETAILS
的声明列,没有像ROWID
这样的“系统”列或者任何表达式。纠正此问题的相关功能请求是:https://github.com/jOOQ/jOOQ/issues/5622
您可以通过创建自己的CLIENT_DETAILS
表来解决此限制,该表包含“合成”ROWID
列,例如由:
CustomTable
type ROWID
列添加到CLIENT_DETAILS
表格来扩展代码生成器(请注意,这会产生不良副作用,例如在调用UpdatableRecord.store()
时)