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
相关产品推荐
相关产品推荐

