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.*
- JPA要求实体必须有无参构造函数,你的
- 查看启动日志找线索:启动项目时盯紧控制台日志,找数据库连接失败、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
相关产品推荐
相关产品推荐

