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字段设计冗余且不灵活,建议重构为一对多关联:
- 创建
ComicAppearance实体类,包含id、comicName等核心字段; - 在当前实体类中使用
@OneToMany注解关联ComicAppearance,实现出场记录的灵活存储与管理。
内容的提问来源于stack exchange,提问作者Celiek
相关产品推荐
相关产品推荐

