JPA继承映射报错:ResultSet未找到default列的解决方案咨询
解决办法
问题根源
default是PostgreSQL的保留关键字,你的ClassID类中defaultCustom属性会被JPA默认映射为default_custom列,但直接在原生查询中使用该别名时,PostgreSQL会将default识别为关键字,导致结果集字段解析异常,最终出现找不到default列的错误。
可行方案(无需修改模型结构)
方案1:给关键字别名添加双引号
修改原生查询,将default_custom别名用双引号包裹,强制PostgreSQL将其视为普通标识符,同时保证与JPA的驼峰转下划线映射规则匹配:
@Repository public interface MyRepository extends JpaRepository<MySuperClass, ClassID> { // 注意:泛型ID需改为ClassID,原代码的Long不符合嵌入式ID类型 @Query(value = "SELECT t.*, 0 as \"default_custom\", null as type FROM My_Entity t WHERE t.id= :id", nativeQuery = true) List<MyEntity> getMyEntity(String id); }
补充:原Repository的泛型第二个参数是
Long,但你的超类使用的是嵌入式IDClassID,这会导致JPA操作异常,建议一并修正为ClassID,不影响现有继承结构。
验证要点
- 确保PostgreSQL查询返回的字段别名与JPA属性的映射列名完全匹配(驼峰转下划线规则)
- 所有涉及PostgreSQL保留关键字的标识符必须用双引号包裹
内容的提问来源于stack exchange,提问作者Iliass Aichane
相关产品推荐
相关产品推荐

