PostgreSQL关联'table_name'不存在问题求助:无法连接tableName表
解决PostgreSQL表名大小写匹配问题
问题原因
PostgreSQL默认会把未用双引号包裹的标识符(表名、列名)转为小写,而你的数据库表是大小写敏感的tableName,Hibernate自动生成的SQL会尝试查询table_name,因此触发"relation不存在"的错误。
解决方案
1. 确认实体类表名注解有效性
你已在@Table中通过转义双引号指定了正确表名,这部分配置没问题:
@Entity @Table(name = "\"tableName\"") data class tableName( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") var id:Long = 0, @Column(name = "aseg") var aseg:String = "", @Column(name = "\"expir\"") var expir: Date? = null, )
2. 全局启用Hibernate标识符引号包裹
在配置文件中添加以下配置,强制Hibernate对所有表名、列名用双引号包裹,避免自动转小写:
spring.jpa.properties.hibernate.globally_quoted_identifiers=true
该配置会让Hibernate生成的SQL中,所有标识符都带上双引号,完美匹配PostgreSQL的大小写敏感表名/列名。
3. 验证SQL输出
通过spring.jpa.show-sql=true查看控制台输出的SQL,确认生成的语句类似如下格式:
select t1_0.id,t1_0.aseg,t1_0."expir" from "tableName" t1_0
若表名和列名都被双引号包裹,说明配置生效。
额外检查点
- 用
SELECT * FROM "tableName";语句在数据库中验证,确认"tableName"表真实存在 - 无需修改实体类名称或数据库表名,保持现有配置即可
内容的提问来源于stack exchange,提问作者Adonis Becerra Morales
相关产品推荐
相关产品推荐

