Может быть, hbm2ddl.auto=update не поддерживает разных пользователей БД?
Мы сталкиваемся со странным спящим поведением 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 ответ
Есть ли что-то вроде внутреннего кэша гибернации, напоминающего "Эй, я уже создал эту таблицу на этом сервере (и мне нет дела до пользователя)".
Нет. Вероятно, происходит то, что USER_A может видеть таблицы, созданные под учетной записью USER_B, и наоборот. Не ясно, какую базу данных вы используете, но я бы попытался настроить Hibernate на использование двух разных схем, в дополнение к использованию только разных пользователей. Вы также можете попытаться установить свойство "hibernate.default_schema", но я не уверен, что это только решит вашу проблему.