2017-07-27 54 views
1

我正在从旧系统更新旧库。刚才我试图将Hibernate 3.4.0.GA更新到4.3.11.Final,我只需要在代码中更改小的东西,一切都很好。但是当我让系统运行时,我收到一个“架构”FOO“不存在”而执行查询。试图隔离这个问题,我发现这发生了从Hibernate 3.5.1到3.5.2的原因。休眠@Formula /错误:架构“FOO”不存在

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

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

@Formula

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

休眠3.5.1 SQL生成

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

休眠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会这样做?我怎样才能解决这个问题?

+0

max之后是否有空格字符?尝试将其删除 –

+0

谢谢@Konstantin V. Salikhov。我删除了空间并工作,我没有看到这个空间。请写下答案,我可以接受。 –

回答

1

看起来好像冬眠不明白max(之间的空格字符max (pm2.id),所以它认为max是列名并在那里添加表别名。

删除空间将解决问题。