You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle无主键表用Repository插入新行,ROWID作为Id的问题

解决Oracle无主键表用ROWID作为ID时的插入问题

报错原因

你遇到的IdentityColumnSupportImpl不支持标识键生成错误,是因为GenerationType.IDENTITY策略只适用于数据库中定义为自增类型的列(比如Oracle 12c+的IDENTITY列、MySQL的auto_increment),而ROWID是Oracle自动维护的伪列,不属于这类自增列,所以这个策略完全不适用。

正确解决方案

ROWID是Oracle在插入数据后自动分配的,不需要也不能手动插入,只需修改实体类中ID字段的注解配置,让它不参与插入和更新操作即可:

修改后的实体类代码:

@Id
@Column(name = "ROWID", insertable = false, updatable = false)
private String id;

@Column(name = "phone_number")
private String phoneNumber;

配置说明

  • insertable = false:告诉JPA在执行INSERT语句时,不要把id字段包含进去,避免手动插入ROWID的错误
  • updatable = false:ROWID是Oracle固定维护的,永远不能修改,所以设置为不可更新

这样调用Repository的save()方法时,只会插入phone_number字段,Oracle自动生成对应的ROWID;插入完成后,JPA会自动把生成的ROWID赋值给实体类的id属性,你可以直接从save()返回的对象中获取这个值。

内容的提问来源于stack exchange,提问作者Sara Eva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:40:48