Hibernate查询无结果:User表返回空对象数组问题排查
问题排查与解决方案
从你提供的Hibernate日志可以看到,SQL已经正确查询出了表中所有字段,但返回的实体对象都是空结构,核心原因是实体类属性名与数据库列名的映射不匹配:
- 数据库表列采用下划线命名(比如
full_name、creation_date、updated_date) - 实体类对应属性使用驼峰命名(
fullName、creationDate、updatedDate) - 默认情况下JPA无法自动识别这种驼峰与下划线的映射关系,导致查询到的字段值无法注入到实体属性中,最终序列化输出空对象。
解决办法(二选一即可)
方法一:开启驼峰转下划线自动映射配置
在Spring Boot配置文件中添加以下配置,让Hibernate自动处理驼峰与下划线的转换:
# application.properties spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy
如果是旧版本Hibernate,可使用:
spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
方法二:显式指定列名映射
给实体类中不匹配的属性添加@Column注解,明确指定对应的数据库列名:
@Table(name = "user") @Entity @Setter @Getter @AllArgsConstructor @NoArgsConstructor public class User { @Id @GeneratedValue private Long id; @Column(name = "full_name") private String fullName; private String username; private String password; private String email; @Column(name = "creation_date") private Date creationDate; @Column(name = "updated_date") private Date updatedDate; }
配置完成后重启服务,重新请求/api/user/list接口,就能得到包含正确字段值的响应结果了。
内容的提问来源于stack exchange,提问作者user19577108
相关产品推荐
相关产品推荐

