Spring Boot 2.5.1中JPA findAll无法识别lastUpdate列问题求助
我正在使用Spring Boot version '2.5.1'开发简单应用,通过Hibernate从本地数据库查询数据。调用Hibernate的.findAll()方法时,收到错误提示:The column name last_update was not found in this ResultSet.
我发现Hibernate将实体类中的lastUpdate字段识别为last_update,但我已经通过@Column注解指定了该字段对应数据库的列名。

恳请帮忙纠正错误?
数据库

实体类
package com.user.learning.springboot.springboot.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import java.sql.Timestamp; import java.util.Date; @Entity @Table(name="student") public class Student { // define fields @Id @Column (name="email") private String email; private String name; private Date dob; private Integer age; @Column (name="lastUpdate") private Timestamp lastUpdate; // define constructors public Student(){ } public Student(String name, Date dob, Integer age, Timestamp lastUpdate) { this.name = name; this.dob = dob; this.age = age; this.lastUpdate = lastUpdate; } // define getters/setters - using auto generate function provided by IDE (just right click, generate) public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getDob() { return dob; } public void setDob(Date dob) { this.dob = dob; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Timestamp getLastUpdate() { return lastUpdate; } public void setLastUpdate(Timestamp lastUpdate) { this.lastUpdate = lastUpdate; } // define toString() method @Override public String toString() { return "Student{" + "email='" + email + '\'' + ", name='" + name + '\'' + ", dob=" + dob + ", age=" + age + ", lastUpdate=" + lastUpdate + '}'; } }
服务实现类
package com.user.learning.springboot.springboot.service; import com.user.learning.springboot.springboot.entity.Student; import com.user.learning.springboot.springboot.repository.StudentRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class StudentServiceImpl implements StudentService{ @Autowired StudentRepository studentRepository; @Override public List<Student> getAll() { return studentRepository.findAll(); } }
已尝试的解决方案
- 参考过相关Stack Overflow解决方案,但未解决问题
问题原因与解决方案
1. 核对数据库列名实际大小写
先执行SQL语句确认数据库中该列的真实名称:
DESC student;
部分数据库(如MySQL)在未加反引号的情况下创建表,会自动将驼峰列名转成小写或下划线格式。如果实际列名是lastupdate或last_update,直接修改@Column的name属性对应真实列名即可。
2. 修改Hibernate物理命名策略
Spring Boot 2.x默认的SpringPhysicalNamingStrategy会自动把驼峰字段转成下划线小写格式,覆盖@Column的指定配置。在配置文件中修改为严格匹配策略:
- application.properties
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
- application.yml
spring: jpa: hibernate: naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
该策略会严格按照@Column注解指定的名称匹配数据库列,不再自动转换格式。
3. 清理缓存重新构建
IDE缓存或Hibernate元数据缓存可能导致注解未生效,执行以下操作:
- IDE中执行
Clean Project+Rebuild Project - 删除target/build目录后重新编译运行
4. 检查依赖版本兼容性
Spring Boot 2.5.1对应Hibernate 5.4.x版本,通过mvn dependency:tree(Maven)或./gradlew dependencies(Gradle)查看依赖树,确保没有引入冲突版本的Hibernate依赖。
内容的提问来源于stack exchange,提问作者Tommy Leong

