2017-07-27 58 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是列名並在那裏添加表別名。

刪除空間將解決問題。