Может быть, hbm2ddl.auto = update не поддерживает разных пользователей БД? - PullRequest
0 голосов
/ 26 января 2011

Мы сталкиваемся со странным поведением гибернации, когда hbm2ddl.auto установлено на update.

В нашей тестовой настройке у нас есть два пользователя базы данных, один из которых содержит таблицы для нашего бета-приложения, а другой - главным образомиспользуется для разработки.Т.е. одинаковые имена таблиц у разных пользователей.Когда нужно создавать новые таблицы, мы делаем это с помощью hbm2ddl.auto=update.

Теперь неожиданно происходит странное поведение: процесс обновления ищет существующие таблицы с неверным пользователем и создает те, которые не найдены с правильным пользователем.

Например, если существуют следующие таблицы

USER_A.TABLE_1
USER_B.TABLE_2

, и мы обновляем три настроенные таблицы: TABLE_1, TABLE_2, TABLE_3 с помощью USER_B, мы получаем

USER_A.TABLE_1
USER_B.TABLE_2
USER_B.TABLE_3

TABLE_1 не создан для USER_B.После переименования USER_A.TABLE_1 в USER_A.TABLE_0 и повторного обновления мы получим ожидаемый результат:

USER_A.TABLE_0
USER_B.TABLE_1
USER_B.TABLE_2
USER_B.TABLE_3

Имеет ли это какой-либо смысл для кого-либо?Есть ли что-то вроде внутреннего кэша гибернации, напоминающего «Эй, я уже создал эту таблицу на этом сервере (и мне нет дела до пользователя)».

Мы провели довольно много тестов, чтобы убедиться, что это не так.проблема конфигурации, воспроизведенная на разных машинах, в разных конфигурациях, из ant или с использованием IDE, убедившись, что пароль USER_A не может быть найден где-либо в каталоге сборки и т. д. Таким образом, мы на 100% уверены, что поведение такое, как описано - но мыСовершенно из идей, что происходит.

Я был бы очень рад услышать ваши идеи по этому поводу, так как эта проблема уже некоторое время мучает.

Большое спасибо, Питер

1 Ответ

0 голосов
/ 26 января 2011

Есть ли что-то вроде внутреннего спящего кэша, напоминающего «Эй, я уже создал эту таблицу на этом сервере (и мне нет дела до пользователя)».

Нет.Вероятно, происходит то, что USER_A может видеть таблицы, созданные под учетной записью USER_B, и наоборот.Не ясно, какую базу данных вы используете, но я бы попытался настроить Hibernate на использование двух разных схем, в дополнение к использованию только разных пользователей.Вы также можете попытаться установить свойство "hibernate.default_schema", но я не уверен, что это только решит вашу проблему.

...