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

Spring框架Native SQL查询报错:ResultSet未找到group_index列

Spring Data JPA Native SQL 查询报错:group_index 列不存在

我在Spring框架的Java Repository中编写了如下Native SQL查询:

@Query(value = "SELECT cr.reviewer_name, cr.message, cr.rating, cr.source, cr.show_status, cr.created_date, " +
    "cr.group_index, string_agg(cr.type, ',') " +
    "FROM customer_review cr " +
    "WHERE cr.type LIKE 'NEWCAR%' AND cr.object_code = :objectCode AND cr.is_deleted NOT IN (true) " +
    "GROUP BY cr.reviewer_name, cr.message, cr.rating, cr.source, cr.show_status, cr.created_date, cr.group_index " +
    "LIMIT :limit OFFSET :offset", nativeQuery = true)
List<Object[]> findByObjectCode(@Param("objectCode") String objectCode, @Param("limit") Integer limit, @Param("offset") Integer offset);

我已确认查询中的表名与数据库表完全一致,但调用时始终返回错误:

The column name group_index was not found in this ResultSet.

我尝试重写查询,手动在PostgreSQL中执行可正常运行,但在Repository接口中调用仍报错。以下是我的表结构:
customer_review表结构


解决方案

1. 给列添加别名(解决下划线命名兼容问题)

Spring Data JPA处理Native SQL结果集时,会自动将下划线命名的列转为驼峰式(比如group_index被转为groupIndex),导致找不到原列名。给查询中的cr.group_index显式添加别名即可:

@Query(value = "SELECT cr.reviewer_name, cr.message, cr.rating, cr.source, cr.show_status, cr.created_date, " +
    "cr.group_index AS group_index, string_agg(cr.type, ',') AS types " +
    "FROM customer_review cr " +
    "WHERE cr.type LIKE 'NEWCAR%' AND cr.object_code = :objectCode AND cr.is_deleted NOT IN (true) " +
    "GROUP BY cr.reviewer_name, cr.message, cr.rating, cr.source, cr.show_status, cr.created_date, cr.group_index " +
    "LIMIT :limit OFFSET :offset", nativeQuery = true)
List<Object[]> findByObjectCode(@Param("objectCode") String objectCode, @Param("limit") Integer limit, @Param("offset") Integer offset);

2. 检查实体类字段映射(若用实体类接收结果)

如果后续打算用实体类替换Object[],需确保实体类中对应字段的@Column注解明确指定列名:

@Column(name = "group_index")
private Integer groupIndex;

3. 全局关闭下划线转驼峰(可选)

若不想逐个添加别名,可在配置文件中关闭Spring的下划线自动转驼峰功能(注意会影响全局字段映射):

  • application.properties
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
  • application.yml
spring:
  jpa:
    hibernate:
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:06:12