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

使用createNativeQuery查询PostgreSQL时混合大小写列名被转小写报错

问题根因

PostgreSQL默认对未加双引号的SQL标识符(表名、列名等)会自动转为全小写后再执行匹配。你看到Hibernate打印的SQL里列名是正确的admission_type_L1,但因为没有双引号包裹,PostgreSQL解析时会自动转成全小写admission_type_l1,如果建表时你是通过双引号指定的大小写混合形式的列名,就会出现找不到列的报错。

解决方案
  • 方案1:直接修改原生查询语句,给大小写混合的列名加双引号,Java代码中需要对双引号做转义处理,修改后代码如下:
Query query = entityManager.createNativeQuery("SELECT distinct a.\"admission_type_L1\" FROM admission_type a");
List<String> result = query.getResultList();
  • 方案2:调整表结构命名,这是PostgreSQL的推荐实践,将所有表、列名统一改为全小写蛇形命名,比如把admission_type_L1修改为admission_type_l1,后续所有查询都不需要额外处理双引号,从根源避免同类问题。
  • 方案3:如果你使用JPA实体类映射该表字段,可在对应字段的@Column注解中明确指定带双引号的列名,示例如下:
@Column(name = "\"admission_type_L1\"")
private String admissionTypeL1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:54:10