Как установить имя схемы, используемое объектами гибернации во время запроса? - PullRequest
6 голосов
/ 29 декабря 2008

Наше приложение использует Hibernate для ORM и хранит данные в нескольких схемах, обращаясь к ним с помощью пользователя, права которого настроены для приложения.

Имена схем определяются во время выполнения на основе данных; нецелесообразно включать их имена в документы сопоставления сущностей. Это означает, что мне нужен способ указать Hibernate использовать конкретное имя схемы при выполнении поиска. Есть ли способ сделать это?

Ответы [ 2 ]

3 голосов
/ 29 декабря 2008

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

1 голос
/ 15 февраля 2009

Мы столкнулись с этой проблемой на работе. Я исправил это, как предлагает Роберт, создав провайдера соединений (т. Е. Реализацию DataSource), названного «OracleSchemaRemappingDataSource» и использовав пружину для подключения.

По сути, этот источник данных реализует getConnection (). Реализация этого метода работает путем получения соединения от какого-то другого источника данных путем инжекции пружины, который он предполагает как соединение оракула, а затем выполняет

ALTER SESSION SET CURRENT_SCHEMA = 'someotherschema'

и они передают это соединение обратно.

Все конфигурации hibernate осторожно используют имена без указания схем для них.

Кроме того: с этим вы не хотите отключать кэширование - разрешите hibernate управлять соединениями в обычном режиме, поскольку мы не делаем никакой магии в приложении, такой как использование разных соединений для каждого пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...