SpringBoot中JPA实体定义引发SQL语法错误排查求助
问题原因与解决办法
问题根源
你遇到的SQL语法错误,核心原因是user是PostgreSQL(从错误日志格式可判断)的保留关键字。虽然你在@Table注解里指定了表名为"User",但Hibernate生成DDL时会把未转义的标识符自动转为小写,最终执行的SQL是create table user (...),这就和数据库的关键字冲突,触发语法错误。
两种解决办法
办法一:更换非关键字表名
修改实体类的@Table注解,改用不会和关键字冲突的表名,比如app_user:@Entity @Table(name="app_user") public class User { // ... 其余代码保持不变 }办法二:给表名添加转义符强制保留大小写
如果一定要用User作为表名,可以在表名前后加上双引号(适配PostgreSQL的转义规则),让Hibernate生成带引号的表名:@Entity @Table(name="\"User\"") public class User { // ... 其余代码保持不变 }这样生成的DDL会是
create table "User" (...),数据库会把带引号的标识符当作普通表名处理,不会识别为关键字。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

