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

Hibernate与Spring Boot新查询是否需使用下划线?

关于Spring Data JPA查询方法与下划线列名的映射问题

嘿,这个问题问到点子上了!在Spring Boot + Hibernate的组合里,你完全不需要在查询方法里用下划线来对应数据库的下划线列名,原因如下:

1. Spring Boot默认的命名策略帮你自动转换

Spring Boot默认采用SpringPhysicalNamingStrategy作为物理命名策略,它的核心规则是:

  • 实体类的驼峰命名属性会自动映射到数据库的下划线分隔列名(比如实体类的idMeeting → 数据库的id_meeting)
  • 反过来,查询方法里的驼峰命名也会自动对应到数据库的下划线列名

举个实际例子:
假设你的实体类定义是这样的:

@Entity
public class User {
    // 对应数据库列id_meeting
    @Column(name = "id_meeting")
    private Long idMeeting;
    
    // 其他属性、构造器、getter/setter省略
}

你只需要写这样的查询方法:

List<User> findByIdMeeting(Long idMeeting);

Spring Data JPA会自动把它转换成对应的JPQL/SQL:

select u from User u where u.id_meeting = ?1

2. 不要在查询方法里加下划线!

如果你写成findById_Meeting(Long id),反而会出问题——因为Spring Data JPA会把下划线当成属性名的分隔符,它会试图解析成id和Meeting两个独立的属性,而你的实体类里并没有这两个属性,最终会抛出属性找不到的异常。

3. 特殊情况:自定义命名策略

如果你手动修改了命名策略(比如改成了老式的ImplicitNamingStrategyLegacyJpaImpl),那可能需要调整,但Spring Boot的默认配置完全能覆盖你的场景,不需要额外修改。

总结一下:放心用驼峰命名写查询方法就好,JPA会帮你搞定和下划线列名的映射~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:04:32