2012-01-11 28 views
6

Ben bir grup tablo ile JPA 1.0 Varlıkları Hibernate 3.3.3 ile eşlenmiş bir Seam 2.2 tabanlı Java EE 5 web uygulaması var. Geliştirme sırasında, bir Tomcat 6, Oracle 10 XE ve Windows 7 üzerinde çalışıyor.JPA Entiy tablo yerine eşanlamlı olarak

Şimdi, veri modelini tüm veritabanı nesnelerinin (myschema) ve bir şemanın sahibi olan bir şemaya bölmek için operasyon departmanının talebi vardı uygulamanın veritabanı kullanıcısı olarak davranır (myschema_app). (Kullanıma bağlı bir veya daha fazlasının select bağlı ve dizilerin: myschema (m ara tablolar düzenli olanlar ve n her ikisi de) den gerekli tüm masalarda

  • oluşturmak şema myschema_app
  • hibe nesne haklarını: Ben şu yaptım , insert, update, delete) myschema_app-
  • eskisinden daha aynı adları kullanmak için myschema_app özel eş anlamlılarını beyan ve diğer schemaNamingContext adı öneki gizleme
  • mülkiyet değiştirmekYeni şema ismine
  • persistence.xml yılında validate için hibernate.hbm2ddl.auto set yerken kullanıcı/

context.xml yılında Tomcat'in veri kaynağı tanımı şifre Uygulamayı başlattığınızda çerçeve EntityManagerFactory oluşturmaya çalıştığında, bir istisna olsun Bana bir masanın eksik olduğunu söylüyor. Bir sql aracında myschema_app bağlı bir select deyimini doğrudan çalıştırdığımda her şey iyi çalışıyor.

Başka bir tablodaki eşanlamlı kullanımın, uygulama için saydam olduğunu anlamıştım. Neyi gözden kaçırdığımı bilen var mı?

cevap

8

Tahminimce, hbm2ddl, özellikle tablolar için değil, eş anlamlılar için değil, uygulamaların gerçekten şemada varmış gibi çalışabilmesidir. Hbm2ddl seçeneğini kaldırmaya çalışın ve uygulamanızı test edin.

DÜZENLEME: Benim tahminim doğrudur görünüyor: https://forum.hibernate.org/viewtopic.php?p=2438033 4.3.0 itibariyle eş anlamlı sorunu çözmek için hibernate.synonyms=true ayarlamak mümkündür

+0

. Evet, daha önce de gördüğüm gibi, bu parametrenin uygulanmasının işe yaradığını görüyoruz, fakat Hibernate'in doğrulama sırasında eşanlamları desteklememesi çok yazık çünkü uygulamanın başlangıcından emin olmak için şemayı başlangıçta doğrulamak iyi bir şey. . –

+0

Sorun, tablo türlerinin özel statik finaline kodlanmış olduğu org.hibernate.tool.hbm2ddl.DatabaseMetadata sınıfında sorun var. String [] TYPES = {"TABLE", "VIEW"}; gerçekten özel statik final olmalıdır. [] TYPES = {"TABLE", "VIEW", "ALIAS", "SYNONYM"}; – user482745