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

Spring Boot连接PostgreSQL时提示未找到关系的问题求助

数据库无表排查指南(PostgreSQL + Spring Boot)

我刚接触Java和Spring Boot,跟着YouTube教程做项目,执行PostgreSQL命令 \dt 时返回:

Did not find any relations.

完全没头绪,下面是我的代码和配置,求排查方向。


排查步骤

  • 确认目标数据库存在:你连接的是customer库,先进入PostgreSQL容器执行 psql -U 你的用户名,再用 \l 查看所有数据库。如果没有customer库,手动创建:CREATE DATABASE customer;
  • 修正数据库连接配置:
    • application.yml里的数据库URL写的是jdbc:postgresql://db:5332/customer,但Spring Boot和Postgres在同一Docker网络(db)内,应该用容器内部端口5432,URL改成 jdbc:postgresql://db:5432/customer
    • 确保application.yml里的用户名、密码和docker-compose.yml中POSTGRES_USER、POSTGRES_PASSWORD完全一致
  • 修复JPA配置错误:
    • show-sql配置位置错了,应该放在jpa节点下,不是jpa.properties里(参考下面修正后的application.yml)
    • ddl-auto: create-drop是正确的,但要保证Customer实体类在Spring Boot的扫描范围内——如果Main.java在com.example.demo包下,Customer也要在这个包或子包中
  • 补全实体类必要结构:
    • JPA要求实体必须有无参构造函数,你的Customer类只写了带参构造,Hibernate无法实例化对象,导致建表失败,需要添加:public Customer() {}
    • 确认Spring Boot版本与JPA包匹配:3.x版本用jakarta.persistence.*,2.x版本用javax.persistence.*
  • 查看启动日志找线索:启动项目时盯紧控制台日志,找数据库连接失败、Hibernate建表报错的信息,比如Connection refused或实体扫描失败的提示,这些是排错关键

我的代码与配置

Main.java

package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Objects;

@SpringBootApplication
@RestController
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }

    @GetMapping("/")
    public GreetingResponse greeting(){
        GreetingResponse greetingString = new GreetingResponse(
                "Hello",
                List.of("Python", "Python", "Python"),
                new Person("Batool", 28, 500_000)
        );
        return greetingString;
    }

    record Person(String name, int age, double savings){}
    
    record GreetingResponse(
            String greeting,
            List<String> favProgrammingLanguages,
            Person person
    ){}
}

Customer.java(已补全无参构造)

import java.util.Objects;

import jakarta.persistence.*;
@Entity
public class Customer {
    @Id
    @SequenceGenerator(name = "customer_id_sequence", sequenceName = "customer_id_sequence")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "customer_id_sequence")
    private Integer id;
    private String name;
    private String email;
    private Integer age;

    // 新增无参构造函数
    public Customer() {}

    public Customer(Integer id, String name, String email, Integer age) {
        this.id = id;
        this.name = name;
        this.email = email;
        this.age = age;
    }

    public Integer getId() { return id; }
    public String getName() { return name; }
    public String getEmail() { return email; }
    public Integer getAge() { return age; }

    public void setId(Integer id) { this.id = id; }
    public void setName(String name) { this.name = name; }
    public void setEmail(String email) { this.email = email; }
    public void setAge(Integer age) { this.age = age; }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Customer customer = (Customer) o;
        return Objects.equals(id, customer.id) && Objects.equals(name, customer.name) && Objects.equals(email, customer.email) && Objects.equals(age, customer.age);
    }

    @Override
    public int hashCode() { return Objects.hash(id, name, email, age); }

    @Override
    public String toString() {
        return "Customer{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                ", age=" + age +
                '}';
    }
}

docker-compose.yml

services:
  db:
    container_name: postgres
    image: postgres
    environment:
      POSTGRES_USER: 你的用户名
      POSTGRES_PASSWORD: 你的密码
      PGDATA: /data/postgres
    volumes:
      - db:/data/postgres
    ports:
      - "5332:5432"
    networks:
      - db
    restart: unless-stopped

networks:
  db:
    driver: bridge

volumes:
  db:

application.yml(已修正配置)

server:
  port: 8080

spring:
  datasource:
    platform: postgres
    driverClassName: org.postgresql.Driver
    # 修正为容器内部端口5432
    url: jdbc:postgresql://db:5432/customer
    username: 你的用户名
    password: 你的密码
  jpa:
    hibernate:
      ddl-auto: create-drop
    properties:
      hibernate:
        dialect: org.hibernate.dialect.PostgreSQLDialect
        format-sql: true
    # 修正show-sql的位置
    show-sql: true
  main:
    web-development-type: servlet

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:52:19