Spring Boot+Hibernate查询时列名被转驼峰的问题求助
问题原因
Spring Data JPA的Sort组件默认基于实体类的属性名生成排序逻辑,而非直接使用数据库列名。当你传入KitID作为排序字段时,它会通过Introspector.decapitalize()将字符串转为驼峰格式kitID,然后尝试在KittingEntity中匹配对应属性——但你的实体类里只有id属性,因此抛出PropertyReferenceException。
注意:Hibernate的命名策略仅负责处理实体属性到数据库列名的映射,不会干预Spring Data JPA对Sort参数的解析逻辑,所以你尝试的各种Hibernate配置都无法解决这个问题。
解决方案
方案1:使用实体属性名排序(推荐)
直接传入实体类的属性名"id",Spring Data JPA会自动通过Hibernate的命名策略映射到数据库列KitID,代码修改如下:
List<KittingEntity> kittingEntities = repository.getKittingRepository().findAll( Sort.by(Sort.Direction.ASC, "id"));
方案2:使用JpaSort.unsafe()指定原生列名
如果场景要求必须直接使用数据库列名(比如多表关联或复杂排序场景),可以使用JpaSort.unsafe()方法,它会跳过属性解析,直接将传入的字符串作为数据库列名使用:
import org.springframework.data.domain.jpa.JpaSort; List<KittingEntity> kittingEntities = repository.getKittingRepository().findAll( JpaSort.unsafe(Sort.Direction.ASC, KittingEntity.Constants.COLUMN_ID_NAME));
方案3:自定义Sort解析逻辑(进阶)
如果项目中有大量类似的原生列名排序需求,可以自定义PropertyPath的解析规则,或者实现自定义的SortTranslator来适配你的数据库列名风格,但这种方式复杂度较高,一般前两种方案足以覆盖需求。
内容的提问来源于stack exchange,提问作者moonlightcheese
相关产品推荐
相关产品推荐

