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

Spring Boot实体类使用Oracle关键字desc作为字段名时表无法创建如何解决

解决方案

问题的根本原因是desc属于Oracle的保留关键字,JPA默认生成建表SQL时会直接将字段名作为列名传入,Oracle会将其识别为语法关键字而非字段标识符,最终导致表创建失败。可以通过以下几种方式解决:

  • 方案1:单个字段强制指定带引号的列名
    直接在desc字段上添加@Column注解,指定列名时用双引号包裹,强制JPA将其作为普通标识符传递给Oracle,修改后的字段代码如下:
    @Column(name = "\"desc\"")
    String desc;
    
    完整的实体类示例:
    @AllArgsConstructor
    @NoArgsConstructor
    @Data
    @Entity
    public class Product {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        Integer pid;
        String name;
        @Column(name = "\"desc\"")
        String desc;
        double price;
    }
    
  • 方案2:开启全局标识符自动引用
    如果项目中存在大量需要使用保留关键字作为字段名的场景,可以在JPA配置中开启全局自动引号配置,无需单独为每个字段加注解。以Spring Boot+Hibernate环境为例,在application配置文件中添加如下配置即可:
    properties格式:
    spring.jpa.properties.hibernate.globally_quoted_identifiers=true
    yml格式:
    spring:
      jpa:
        properties:
          hibernate:
            globally_quoted_identifiers: true
    
    开启后Hibernate会自动为所有表名、字段名添加双引号,避免保留关键字冲突。
  • 方案3:修改列名规避关键字
    如果业务上允许调整数据库列名,可以直接将数据库列名改为非保留关键字(比如description),实体类对应字段也同步修改,无需额外配置即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:54:03