Hibernate @Formula / ERROR:schema" FOO"不存在

时间:2017-07-27 16:15:14

标签: java postgresql hibernate

我正在从旧系统更新旧库。刚才我试图将Hibernate 3.4.0.GA更新到4.3.11.Final,我只需要改变代码中的小东西,一切都很好。但是当我把系统投入运行时,我正在接收"架构" FOO"执行查询时不存在" 。试图找出问题,我发现这种情况发生在Hibernate 3.5.1到3.5.2以及原因之中。

生成sql时的Hibernate,正在向函数添加模式。我现在展示两个版本的差异。

protocolo_1 是主模式的别名,这是@Formula在Protocolo.java中添加的子查询,模式的名称也是协议。

@Formula

select max (pm2.id) from protocolo.protocolomovimento pm2 where pm2.id_protocolo = id

Hibernate 3.5.1 SQL生成

select max (pm2.id) from protocolo.protocolomovimento pm2 where pm2.id_protocolo = protocolo1_.id

Hibernate 3.5.2 SQL生成

select protocolo_1.max (pm2.id) from protocolo.protocolomovimento pm2 where pm2.id_protocolo = protocolo1_.id

我使用PostgreSQL 9.4.12和各自的驱动程序和org.hibernate.dialect.PostgreSQLDialect(在这个版本的hibernate中,它是PostgreSQL的独特方言)

我在这里找到了另一个有类似问题的人Why is Hibernate adding schema name to Hsql functions?,但我认为它只是类似的,这不是我的情况。

为什么Hibernate这样做?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

看起来hibernate不理解表达式max(max (pm2.id)之间的空格字符,所以它认为max是列名并在那里添加表别名。

删除空间将解决问题。