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

Hibernate @Formula注解引用PostgreSQL驼峰命名表SQL生成异常问题

问题根因

Hibernate 处理@Formula注解内的 SQL 片段时,会自动解析未带限定符的标识符,将识别为当前实体字段的内容自动拼接主查询的表别名。你使用双引号包裹驼峰命名的MyTableB表名时,Hibernate 解析器误将其判定为MyTableA实体的字段,因此额外拼接了主表别名ta,最终导致 SQL 语法错误。

解决方案
  • 方案1:使用 Hibernate 内置{h-schema}占位符
    该占位符会自动替换为项目配置的数据库默认 schema,且 Hibernate 不会为携带该占位符的表名拼接主表别名,修改后的注解写法如下:
@Formula( "( SELECT tb.description FROM \"{h-schema}MyTableB\" tb WHERE tb.id = id_my_table_b LIMIT 1 )" )
  • 方案2:手动指定表所属 schema
    如果你的表归属明确的 schema(比如 PostgreSQL 默认的public),直接给表名加上 schema 限定,Hibernate 识别到全限定表名后就不会自动追加主表别名:
@Formula( "( SELECT tb.description FROM \"public\".\"MyTableB\" tb WHERE tb.id = id_my_table_b LIMIT 1 )" )

两种方案修改完成后,生成的 SQL 都会正确渲染为from "MyTableB" tb,不会携带主表别名ta,可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:15:10