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

Spring Boot 2.5.1中JPA findAll无法识别lastUpdate列问题求助

Spring Boot+Hibernate 查询报错:last_update 列不存在

我正在使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:05:32