JPA Entiy на синоним вместо таблицы
у меня есть веб-приложение Java EE 5 на основе Seam 2.2 с кучей таблиц, сопоставленных с объектами JPA 1.0 через Hibernate 3.3.3. Во время разработки он работает на Tomcat 6, Oracle 10 XE и Windows 7.
теперь у нас был запрос отдела операций на разделение модели данных на одну схему, являющуюся владельцем всех объектов базы данных (myschema
) и одна схема, действующая как пользователь базы данных приложения (myschema_app
). Поэтому я сделал следующее:--18-->
- создать схема
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
говорит мне, что таблица отсутствует. Когда я выполняю инструкцию select непосредственно в инструменте sql с помощью myschema_app
подключен, все работает нормально.
я понял, что использование синонима, идущего на другой стол, прозрачно для приложения. Кто-нибудь представляете, что я мог упустить?
2 ответов
Я предполагаю, что hbm2ddl используется специально для таблиц, а не для синонимов, но ваше приложение действительно должно работать так, как если бы таблицы существовали в схеме. Попробуйте удалить параметр hbm2ddl и протестировать приложение.
EDIT: кажется, моя догадка верна:https://forum.hibernate.org/viewtopic.php?p=2438033
начиная с 4.3.0, можно установить hibernate.synonyms=true
, чтобы решить вашу проблему с синонимами.
ссылки:
https://github.com/hibernate/hibernate-orm/commit/1df4b2ea3c98c74f3b6bbd42e266ee5c7ad60d27