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

解决Hibernate操作Oracle的CommandAcceptanceException错误及数据插入问题

解决Hibernate使用Oracle保留字User作为表名导致的ORA-00903错误

问题根源

Oracle将User列为保留字,Hibernate自动生成的DDL直接使用该词作为表名时,会触发ORA-00903(无效表名)异常,进而引发org.hibernate.tool.schema.spi.CommandAcceptanceException。

解决办法

1. 更换非保留字表名(推荐)

直接修改实体类的表名映射,用一个不属于Oracle保留字的名称替代User,比如APP_USER、SYSTEM_USER等。这种方式能彻底避免保留字带来的潜在问题。

示例代码:

@Entity
// 替换原有的@Table(name = "User")
@Table(name = "APP_USER")
public class User {
    // 实体字段、getter/setter等保持不变
}

2. 给表名添加双引号转义

如果必须保留User作为表名,可以通过双引号将其包裹,让Oracle将其识别为普通标识符。注意Oracle对带引号的标识符区分大小写,建议统一使用大写(如"USER")避免后续查找表时出错。

示例代码:

@Entity
@Table(name = "\"USER\"")
public class User {
    // 实体字段、getter/setter等保持不变
}

3. XML映射文件的处理方式

若使用hbm.xml配置实体映射,同样在<class>标签的table属性中添加双引号:

<class name="com.example.User" table="\"USER\"">
    <!-- 字段映射配置 -->
</class>

验证步骤

修改完成后重启项目,查看Hibernate输出的DDL语句,确认表名已正确处理;随后执行数据插入操作,验证是否能成功写入Oracle数据库。

内容的提问来源于stack exchange,提问作者prasanna kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 13:20:04