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

Postgres项目中如何避免在JPA注解中指定information_schema?

问题:如何避免在JPA注解中重复指定schema参数?

我创建了一个基于PostgreSQL数据库的Spring项目,发现实体类对应的表被自动创建在了information_schema中,导致我必须在@Table或@JoinTable注解里手动添加schema参数才能正常映射,示例代码如下:

@Entity
@Table(name = "book",  schema = "information_schema")
public class Book { ...
@ManyToMany
@JoinTable(
    name = "book_genre",
    schema = "information_schema",
    joinColumns = @JoinColumn(name = "book_id"),
    inverseJoinColumns = @JoinColumn(name = "genre_id"))
private List<Genre> genres = new ArrayList<>();

当前我的application.yml配置如下:

spring:
  datasource:
    url: "jdbc:postgresql://localhost:5432/postgres"
    username: ...
    password: ...

请问有没有办法通过修改应用配置来全局指定默认schema,避免每次在注解里重复设置?


解决方案

可以通过以下几种方式在配置中全局指定默认schema,无需在每个注解中手动添加:

  • 在JDBC URL中指定默认schema
    直接在PostgreSQL的JDBC连接URL末尾加上currentSchema参数,指定目标schema:
spring:
  datasource:
    url: "jdbc:postgresql://localhost:5432/postgres?currentSchema=information_schema"
    username: ...
    password: ...

这种方式会让JDBC连接默认使用指定的schema,JPA在创建表和执行查询时都会自动沿用这个schema。

  • 通过Spring Data JPA配置全局默认schema
    如果使用Spring Data JPA,可直接配置Hibernate的默认schema参数,在application.yml中添加:
spring:
  jpa:
    properties:
      hibernate.default_schema: information_schema

该配置会让Hibernate生成SQL语句时默认使用指定的schema,所有未单独设置schema参数的实体类都会自动使用这个全局配置。

  • 设置数据库用户的默认schema
    还可以通过修改PostgreSQL用户的默认schema,从底层解决问题:
ALTER USER your_username SET search_path TO information_schema;

执行这条SQL后,该用户每次连接数据库都会默认使用information_schema作为当前schema,应用端无需额外配置。

注意:information_schema是PostgreSQL的系统schema,通常不建议在其中创建业务表,建议创建独立的业务schema(比如public或自定义的book_schema)存放业务数据,避免与系统表混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:35:21