Может быть, 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", но я не уверен, что это только решит вашу проблему.

Другие вопросы по тегам