2012-01-11 25 views
6

我有一個基於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) ,insertupdatedelete)到myschema_app
  • myschema_app爲了使用比以前相同的名稱聲明私有同義詞和隱藏其他架構的名稱前綴
  • 變化特性hibernate.default_schema新模式名persistence.xml
  • 更改用戶/密碼在Tomcat中的數據源定義context.xml

當我啓動應用程序,同時具有hibernate.hbm2ddl.auto設定爲validate,我得到一個異常時,框架嘗試創建EntityManagerFactory告訴我一張桌子丟失了。當我在連接myschema_app的sql工具中直接執行select語句時,一切正常。

我知道在另一個表上使用同義詞對於應用程序是透明的。有沒有人知道我可能忽略了什麼?

回答

8

我的猜測是hbm2ddl特別針對表進行搜索,而不是針對同義詞,但是您的應用程序確實應該像表中存在的表一樣工作。嘗試刪除hbm2ddl選項並測試您的應用程序。

編輯:看來我的猜測是正確的:https://forum.hibernate.org/viewtopic.php?p=2438033

+0

這是一些快速的回覆,10點賺了。是的,我已經看到,忽略該參數使應用程序可以工作,但遺憾的是Hibernate在驗證過程中不支持同義詞,因爲我認爲在啓動時驗證模式以確保它適合應用程序是一件好事。 – 2012-01-11 10:11:58

+0

問題是在休眠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