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

Spring Boot使用Docker部署PostgreSQL出现column does not exist错误如何解决

错误根本原因
  • PostgreSQL默认对未加双引号的SQL标识符做小写转换,你实体类中显式指定的驼峰列名differenceToLexiFiPriceScore,在Hibernate生成SQL时未加双引号,被PostgreSQL自动转成全小写的differencetolexifipricescore,和数据库表中实际的列名不匹配。
  • 你的Hibernate配置存在冲突:spring.jpa.hibernate.ddl-auto是Spring Boot的配置项,写在原生hibernate.cfg.xml中不生效,原生Hibernate对应的DDL自动更新配置key为hibernate.hbm2ddl.auto,导致DDL更新逻辑未触发,数据库表未生成对应的列。
  • 之前使用H2数据库正常是因为H2对大小写的处理规则更宽松,不会强制转小写,所以不会出现命名不匹配问题。
解决方案

方案1:统一使用PostgreSQL标准命名规则(推荐)

将所有实体类中驼峰格式的@Column(name)值改为下划线分隔的全小写格式,符合PostgreSQL的命名习惯,从根源避免大小写问题:

// 修改前
@Column(name = "differenceToLexiFiPriceScore")
Float differenceToLexiFiPriceScore;
@Column(name = "distanceToBandsScore")
Float distanceToBandsScore;
@Column(name = "metricC")
Float metricC;

// 修改后
@Column(name = "difference_to_lexifi_price_score")
Float differenceToLexiFiPriceScore;
@Column(name = "distance_to_bands_score")
Float distanceToBandsScore;
@Column(name = "metric_c")
Float metricC;

方案2:保留驼峰列名,配置Hibernate自动给标识符加双引号

在hibernate.cfg.xml的session-factory节点下添加如下配置,让Hibernate生成SQL时自动给所有表名、列名加双引号,PostgreSQL就会保留大小写:

<property name="hibernate.globally_quoted_identifiers">true</property>

也可以单独给需要保留大小写的列手动加双引号:

@Column(name = "\"differenceToLexiFiPriceScore\"")
Float differenceToLexiFiPriceScore;

方案3:修复配置冲突,确保DDL自动更新生效

删除hibernate.cfg.xml中spring.jpa开头的配置项,这类Spring Boot专属配置放到原生Hibernate配置文件中不会生效,如需在Hibernate配置文件中开启DDL自动更新,替换为原生配置:

<!-- 替换原有的spring.jpa.hibernate.ddl-auto配置 -->
<property name="hibernate.hbm2ddl.auto">update</property>

也可以直接删除hibernate.cfg.xml中的相关JPA配置,统一通过Spring Boot的application.yml或者docker-compose的环境变量配置,优先级更高。

验证步骤

修改配置后先手动登录PostgreSQL容器,查看表结构确认列名是否匹配:

# 进入PostgreSQL容器
docker exec -it db psql -U <你的postgres用户名> compose-postgres
# 查看rtdatabase表结构
\d rtdatabase

对比输出的列名和Hibernate生成SQL中的列名是否一致即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:54:00