Spring Boot中Entity无法创建PostgreSQL表的问题求助
问题解决:PostgreSQL创建user表时语法错误
问题原因
user是PostgreSQL的保留关键字,直接在CREATE TABLE语句中使用作为表名时,PostgreSQL会将其识别为关键字而非表名,从而触发语法错误。
解决方案
有两种可行的解决方式:
方式1:修改表名为非关键字
直接将实体类中的@Table注解的表名改成非关键字名称,比如users或app_user:
@Entity @Table(name = "users") // 替换为非关键字名称 public class UserModel { // ... 其他代码保持不变 }
方式2:给表名添加双引号(强制PostgreSQL识别为标识符)
如果必须保留user作为表名,需要在JPA注解中给表名加上双引号,让Hibernate生成带双引号的SQL语句:
@Entity @Table(name = "\"user\"") // Java字符串中需转义双引号 public class UserModel { // ... 其他代码保持不变 }
此时Hibernate生成的SQL会变为:
create table "user"(id bigserial not null, email varchar(255), name varchar(255), priority integer, primary key (id))
PostgreSQL会将带双引号的"user"识别为表名,而非关键字。
额外优化提示
你的实体类中主键字段的@Column(unique = true, nullable = true)配置不合理,主键默认具备唯一、非空特性,可简化为:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
内容的提问来源于stack exchange,提问作者Raúl Peñate
相关产品推荐
相关产品推荐

