2010-06-11 73 views
7

我正在開發一個Java Web應用程序,它使用Hibernate(基於註釋)將實體持久化到Oracle 11g數據庫。 DBA爲這些表創建了同義詞,並要求我使用這些同義詞而不是物理表。 (例如:表「Foo」具有同義詞「S_Foo」)Hibernate架構驗證在Oracle表上失敗Synonyms

如果我啓用了「hibernate.hbm2ddl.auto = validate」,那麼應用程序在啓動時會失敗並顯示「Missing Table:S_Foo」。如果我關閉驗證,那麼應用程序啓動正常,並正常工作。我的猜測是Hibernate只在驗證表存在時才檢查物理表而不是同義詞。

有什麼辦法來啓用Hibernate架構驗證同義詞嗎?我可以在註釋中指定物理表和同義詞嗎?我更喜歡在應用程序啓動時額外安全檢查表結構是否正確。

+0

你可以發佈完整的堆棧跟蹤,還提到Hibernate,jdbc驅動程序和方言的版本。 – 2010-06-11 16:40:43

+0

是否將同義詞創建爲PUBLIC同義詞,或由Hibernate以何種用戶身份登錄?這可能會影響結果。 (或者它可能不) – 2012-06-12 05:25:59

回答

0

我不熟悉hibernate,但可以嘗試視圖而不是同義詞。如果您只是將這些表格用於視圖,它將與同義詞一樣起作用。如果您希望能夠在「桌面」上執行CRUD,但您需要構建一堆替代觸發器。

1

更改hibernate.hbm2ddl.auto=validatehibernate.hbm2ddl.auto value =「」那麼它不會失敗。