У меня есть веб-приложение Java EE 5 на основе Seam 2.2 с кучей таблиц, сопоставленных с сущностями JPA 1.0 через Hibernate 3.3.3.Во время разработки он работал на Tomcat 6, Oracle 10 XE и Windows 7.
Теперь у нас был запрос от отдела операций на разделение модели данных на одну схему, являющуюся владельцем всех объектов базы данных (myschema
) и одна схема, выступающая в качестве пользователя базы данных приложения (myschema_app
).Поэтому я сделал следующее:
- создать схему
myschema_app
- предоставить права на объекты для всех необходимых таблиц из
myschema
(как обычных, так и промежуточных таблиц n: m) и последовательностейв зависимости от использования (один или несколько из select
, insert
, update
, delete
) до myschema_app
- объявляют частные синонимы в
myschema_app
, чтобы использовать те же имена, что иперед и скрывая префикс имени другой схемы - измените свойство
hibernate.default_schema
на новое имя схемы в persistence.xml
- измените имя пользователя / пароль в определении источника данных Tomcat в
context.xml
Когда я запускаю приложение с hibernate.hbm2ddl.auto
, установленным на validate
, я получаю исключение, когда инфраструктура пытается создать EntityManagerFactory
, сообщая, что таблица отсутствует.Когда я выполняю оператор выбора непосредственно в инструменте sql с подключенным myschema_app
, все работает нормально.
Я понял, что использование синонима для другой таблицы прозрачно для приложения.Кто-нибудь знает, что я мог упустить из виду?