Ошибка спящего режима при использовании Oracle? - PullRequest
0 голосов
/ 05 марта 2010

У меня проблема в том, что я использую свойство в persistence.xml, которое заставляет Hibernate искать только таблицы в данной схеме.

<property name="hibernate.default_schema" value="FOO"/>

Поскольку сейчас мы используем 4 разные схемы, реальным решением является создание 4 военных файлов с измененным persistence.xml.

Это не очень элегантно.

Кто-нибудь знает, как я могу настроить схему со свойством или манипулировать строкой соединения JDBC?

Я использую Oracle 10g, патч 10_2_3.

Большое спасибо.

Ответы [ 4 ]

1 голос
/ 05 марта 2010

Если вы не хотите создавать четыре разных WAR, поместите это свойство в файл hibernate.properties и поместите этот файл в путь к классам (но вне веб-приложения) для каждого веб-приложения.

1 голос
/ 05 марта 2010

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

Для пользователя вы можете создавать синонимы и разрешения для таблиц.

Например

create or replace synonym USER1.tablename FOR SCHEMA1.tablename;  
create or replace synonym USER2.tablename FOR SCHEMA1.tablename;  
create or replace synonym USER3.tablename FOR SCHEMA2.tablename;  

А когда вы получаете доступ к таблицам из спящего режима, просто оставьте схему выключенной.Когда вы вошли в систему как USER1, она будет использовать SCHEMA1 и т. Д.

Таким образом, вам не нужно создавать четыре разных файла WAR с четырьмя разными файлами persistence.xml.Просто разверните приложение четыре раза с различными JDBC-подключениями.

Надеюсь, это поможет.

0 голосов
/ 05 марта 2010

Я создал метод с именем deduceSchema, который запускаю при настройке SessionFactory. Он открывает соединение jdbc с использованием источника данных (поскольку у вас еще нет сеанса Hibernate) и запрашивает «выбрать пользователя из двойного», чтобы получить зарегистрированного пользователя. Это будет точно, если пользователь, вошедший в систему, также владеет таблицами. Если нет, я использую переменную окружения jndi для переопределения.

Получив схему, я изменяю конфигурацию Hibernate, чтобы установить ее для каждой таблицы, хотя это необходимо, только если зарегистрированный пользователь отличается от схемы:

for (Iterator iter = configuration.getTableMappings(); iter.hasNext();) {
  Table table = (Table) iter.next();
  table.setSchema(schema);
}
0 голосов
/ 05 марта 2010

Смотрите это - https://www.hibernate.org/429.html

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