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

Spring Boot+PostgreSQL报错:ResultSet未找到列l_p求助

问题描述

我在Java Spring Boot项目中使用PostgreSQL数据库,定义了如下实体类:

@Id
@GeneratedValue(
        strategy = GenerationType.IDENTITY
)
@Column(name = "l_p")
private Long l_p;
private String marvel_comic_character_name;
private String comic_appearance_1;
private String comic_appearance_2;
// ... 省略comic_appearance_3至comic_appearance_35的字段定义

同时编写了如下Repository接口方法:

@Query(
      value="SELECT COUNT(marvel_comic_character_name) " +
      "FROM marvel_super_heroes WHERE marvel_comic_character_name ~* ':character'",
      nativeQuery = true)
List<Character> countAllCharacterOccurences(@Param(value = "character")String character);

测试时出现如下错误:

Unable to find column position by name: l_p [The column name l_p was not found in this ResultSet.] [n/a]; SQL [n/a]

尝试过相关解决方案但未解决,寻求有效办法。


问题原因及解决办法
  • 返回类型不匹配:方法声明返回List<Character>,但SQL仅返回一个数值统计结果。Spring Data JPA会尝试将结果映射到Character实体,而实体依赖l_p等字段,但查询结果中不存在这些列,这是报错的直接原因。
  • SQL参数绑定错误:SQL中':character'的单引号会将参数视为字面量,无法实现动态参数绑定,导致正则匹配逻辑失效。

修复后的Repository方法

@Query(
      value="SELECT COUNT(marvel_comic_character_name) " +
      "FROM marvel_super_heroes WHERE marvel_comic_character_name ~* :character",
      nativeQuery = true)
Long countAllCharacterOccurences(@Param(value = "character")String character);

额外优化建议

实体类中35个comic_appearance_X字段设计冗余且不灵活,建议重构为一对多关联:

  1. 创建ComicAppearance实体类,包含id、comicName等核心字段;
  2. 在当前实体类中使用@OneToMany注解关联ComicAppearance,实现出场记录的灵活存储与管理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:37:11