我正在从旧系统更新旧库。刚才我试图将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会这样做?我怎样才能解决这个问题?
max之后是否有空格字符?尝试将其删除 –
谢谢@Konstantin V. Salikhov。我删除了空间并工作,我没有看到这个空间。请写下答案,我可以接受。 –