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

Spring与Hibernate升级后,如何配置Hibernate查询列名大小写不敏感

问题解决:Hibernate 6中HQL属性名大小写敏感配置

问题原因

升级到Hibernate 6后,HQL解析器默认严格匹配实体属性名的大小写。你的查询中使用mycolumn(全小写),但实体类的属性是myColumn(驼峰格式),Hibernate 6无法识别该属性名,因此抛出SemanticException。而Hibernate 5的解析器对属性名大小写不敏感,所以之前能正常运行。

解决方案

通过Hibernate配置开启HQL属性名大小写不敏感:

1. 在Spring Boot配置文件中添加参数

application.properties:

spring.jpa.properties.hibernate.query.hql.property-name-case-insensitive=true

application.yml:

spring:
  jpa:
    properties:
      hibernate:
        query:
          hql:
            property-name-case-insensitive: true

2. 原理说明

该配置会让Hibernate在解析HQL时忽略属性名的大小写差异,无论是mycolumn、MYCOLUMN还是myColumn,都能正确匹配到实体类的myColumn属性。

备选方案(不推荐)

如果不想修改配置,也可以将查询语句改为原生SQL(使用createNativeQuery),直接引用数据库列名MYCOLUMN:

@Override
@Transactional(readOnly = true)
public List<Long> findIdsByQuery(String query) {
    NativeQuery<Long> nativeQuery = em.createNativeQuery("select IDX from MyEntities where " + query, Long.class);
    return nativeQuery.getResultList();
}

但这种方式会失去HQL的面向对象特性,直接耦合数据库列名,不建议长期使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:25:59