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

Spring Boot应用正常运行但数据库未建表、数据无法保存问题排查

Spring Boot数据无法保存且未生成数据库表排查求助

我在Spring Boot项目中遇到两个问题:数据无法保存至数据库,且启动应用后数据库未生成对应的Person数据表。以下是我的Person实体类代码及application配置文件内容,请求协助排查问题原因:

Person实体类

// Person.java
package com.poc.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Person {
    // 属性
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String fName;
    private String lName;

    public Person() {

    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getfName() {
        return fName;
    }

    public void setfName(String fName) {
        this.fName = fName;
    }

    public String getlName() {
        return lName;
    }

    public void setlName(String lName) {
        this.lName = lName;
    }
}

application配置文件

spring.jpa.show-sql= true
spring.datasource.url= jdbc:postgresql://localhost:5432/Comapany
spring.datasource.username= postgres
spring.datasource.password= 0000
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation= true
spring.jpa.hibernate.ddl-auto= update

排查方向

  • 包扫描范围问题:检查Spring Boot启动类所在包层级。如果启动类在com.poc包或其父包下,Spring会自动扫描子包;若启动类在其他包(如com.app),需在启动类上添加@EntityScan(basePackages = "com.poc.entity")指定实体类所在包,否则JPA无法识别Person实体,不会生成数据表。
  • 数据库连接校验:配置中数据库名为Comapany,确认拼写是否正确(应为Company?)。PostgreSQL不会自动创建不存在的数据库,需手动提前创建目标数据库,否则连接失败后DDL操作无法执行。
  • 依赖完整性检查:确认项目依赖中是否包含Spring Data JPA和PostgreSQL驱动。以Maven为例,需添加以下依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>

缺失依赖会导致JPA功能无法正常工作,无法生成数据表。

  • DDL配置生效验证:查看启动日志,搜索hibernate.hbm2ddl.auto,确认实际生效值为update。若存在多配置文件或profile覆盖,该值可能被改为none或validate,导致无法自动创建表。
  • 数据库权限检查:确认postgres用户拥有创建表的权限。可手动使用该用户登录数据库,尝试创建测试表验证权限是否正常,权限不足会导致update模式下无法生成表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:31:16