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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:07:35