解决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
相关产品推荐
相关产品推荐

