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
相关产品推荐
相关产品推荐

