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

Spring Boot自动创建PostgreSQL表时,表名点被替换为下划线问题

解决Hibernate将表名中的点替换为下划线的问题

问题原因

你遇到的情况是因为Hibernate默认的命名策略会自动将表名中的非字母数字字符(比如.)替换为下划线,所以abc.users被转成了abc_users。而你实际想要的是指定PostgreSQL的schema(abc)和表名(users),不是把点作为表名的一部分。

解决方案

方案1:使用@Table的schema属性(推荐)

这是JPA规范中指定schema的标准方式,把schema和表名分开配置:

@Entity
@Table(schema = "abc", name = "users")
@Getter
@Setter
@RequiredArgsConstructor
public class UserEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private UUID id;

    @Column(unique = true, nullable = false)
    private String username;

    @Column(nullable = false)
    private String password;
}

这样Hibernate会正确识别abc是schema,users是表名,生成的SQL会是create table abc.users (...)。

方案2:关闭Hibernate的表名自动替换策略

如果你一定要在name属性中使用点分隔(不推荐,不符合规范),可以修改配置,使用不做任何替换的物理命名策略:
在application.properties中添加:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

这个策略会完全使用你指定的表名字符串,不会替换其中的点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 21:47:17