2013-07-11 5 views
1

Я использую hibernate (3.6.9.Final) и оракул 11g databse с помощью jdbc (ojdbc6: oracle.jdbc.OracleDriver) моя строка подключения jdbc: oracle: thin: @SERVERNAME : 1521: ORCL DataSource: com.mchange.v2.c3p0.ComboPooledDataSourceOracle JDBC подключается к неправильному пользователю

МОК: весна 3.0.7.RELEASE

сервер: 6

кот

описание моей проблемы: у меня есть две схемы (пользователи), определенные на моем сервере oracle MY_SC и MY_OLD_SC, MY_OLD_SC представляет старую схему моего приложения и имеет таблицу my_table с одной колонкой именем my_id MY_SC последняя схема моего приложения, а также имеет MY_TABLE, но в дополнении к my_id столбца имеет также my_name столбец

Когда я начинаю приложение с пользователем MY_SC и зимуют на Validate я не по следующему исключению:

org.hibernate.HibernateException: Отсутствует колонок: my_name в MY_OLD_SC.MY_TABLE

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

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

Обратите внимание, что если я подключаюсь к разработчику sql, подключение к пользователю кажется правильным.

заявление для создания пользователей:

CREATE USER username IDENTIFIED BY username 
     DEFAULT TABLESPACE USERS 
     TEMPORARY TABLESPACE temp 
     QUOTA UNLIMITED ON USERS; 


GRANT conn TO username; 

код impdb:

./impdp system/[email protected] remap_schema=org_name:new_name directory=DATA_PUMP_DIR TRANSFORM=oid:n dumpfile=backup.dmp 

будет здорово, если вы будете знать, что может быть проблема, может быть, мне нужно создать пользователя по-разному ? что может вызвать эту проблему?

Спасибо advence

ответ

1

я имел эту проблему в последнее время с Hibernate 3.3.0. В основном, сканер метаданных базы данных Hibernate, который запускается во время проверки, подбирает любую таблицу, которая соответствует определению вашей сущности, независимо от того, какая схема она исходит до тех пор, пока она имеет доступ к чтению для определения таблицы (не обязательно для чтения доступа к самой таблице). Он получает их в алфавитном порядке, поэтому, если ваш объект предназначен для таблицы WIDGET, а ваша целевая схема - MY_APP_SCHEMA, но есть еще один WIDGET в ANOTHER_APPS_SCHEMA, один из ANOTHER_APPS_SCHEMA будет использоваться Hibernate для проверки объекта.

Я был не в состоянии найти что-нибудь официальное на сайте Hibernate, но нашел похожие должности here и here.

Возможно, вы можете использовать hibernate.default_schema, чтобы установить схему использования Hibernate.

+0

Thanks Chris, -Dhibernate.default_schema = MY_USER решил это для меня. Очень странно, что Hibernate делает это. Я использую 3.6.7. –

0

Существует более чистый способ привязать спящий режим к схеме по умолчанию - использовать свойство среды при запуске сервера. На Java использование Jvm:

-Dhibernate.default_schema=YOUR_SCHEMA 
0

Одно из решений устанавливающего hibernate.default_schema свойства, чтобы соответствовать вашему пользователю (. В вашей настойчивости единице или окр собственности как TomaszZ указал).

Другое решение отменяет права доступа к другим схемам для вашего пользователя. Этого нельзя допускать, кроме того, это может быть связано с проблемами личной безопасности (если такой доступ для этого конкретного пользователя не требуется).