JPA Энтий по синониму вместо таблицы - PullRequest
7 голосов
/ 11 января 2012

У меня есть веб-приложение 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, все работает нормально.

Я понял, что использование синонима для другой таблицы прозрачно для приложения.Кто-нибудь знает, что я мог упустить из виду?

Ответы [ 2 ]

8 голосов
/ 11 января 2012

Я предполагаю, что hbm2ddl выполняет поиск специально для таблиц, а не для синонимов, но ваше приложение должно действительно работать так, как если бы таблицы существовали в схеме.Попробуйте удалить опцию hbm2ddl и протестировать ваше приложение.

РЕДАКТИРОВАТЬ: кажется, мое предположение верно: https://forum.hibernate.org/viewtopic.php?p=2438033

4 голосов
/ 19 января 2016

Начиная с 4.3.0, можно установить hibernate.synonyms=true для решения вашей проблемы с синонимами.

Ссылки:

https://github.com/hibernate/hibernate-orm/commit/1df4b2ea3c98c74f3b6bbd42e266ee5c7ad60d27

https://hibernate.atlassian.net/browse/HHH-8183

https://github.com/hibernate/hibernate-orm/pull/508

...