我有一個基於Seam 2.2的Java EE 5 Web應用程序,其中一些表通過Hibernate 3.3.3映射到JPA 1.0實體。在開發期間,它運行在Tomcat 6,Oracle 10 XE和Windows 7上。JPA Entiy代替表
現在,我們請求操作部門將數據模型拆分爲一個模式,即所有數據庫對象的所有者(myschema
)和一個模式充當應用程序的數據庫用戶(myschema_app
)。根據使用(一個或多個select
和序列所以我做了以下內容:
- 創建模式
myschema_app
- 授予對象權限的所有必要的表從
myschema
(M中間表規則的人都和n) ,insert
,update
,delete
)到myschema_app
- 在
myschema_app
爲了使用比以前相同的名稱聲明私有同義詞和隱藏其他架構的名稱前綴 - 變化特性
hibernate.default_schema
新模式名persistence.xml
- 更改用戶/密碼在Tomcat中的數據源定義
context.xml
當我啓動應用程序,同時具有hibernate.hbm2ddl.auto
設定爲validate
,我得到一個異常時,框架嘗試創建EntityManagerFactory
告訴我一張桌子丟失了。當我在連接myschema_app
的sql工具中直接執行select語句時,一切正常。
我知道在另一個表上使用同義詞對於應用程序是透明的。有沒有人知道我可能忽略了什麼?
這是一些快速的回覆,10點賺了。是的,我已經看到,忽略該參數使應用程序可以工作,但遺憾的是Hibernate在驗證過程中不支持同義詞,因爲我認爲在啓動時驗證模式以確保它適合應用程序是一件好事。 – 2012-01-11 10:11:58
問題是在休眠org.hibernate.tool.hbm2ddl.DatabaseMetadata類中,表類型被硬編碼爲 private static final String [] TYPES = {「TABLE」,「VIEW」};它真的應該是 private static final String [] TYPES = {「TABLE」,「VIEW」,「ALIAS」,「SYNONYM」}; – user482745 2015-03-19 14:50:38