Для чего бы то ни было, никогда НИКОГДА не используйте hbm2ddl.auto в любой действующей / производственной базе данных.
Да, «работает как задумано», что «обновление» не удаляет столбцы, на которые нет ссылок(возможно, чтобы позволить вам использовать «устаревшие» базы данных, в которых есть столбцы, которые не используются вашим приложением гибернации, но могут использоваться внешними приложениями).Однако в определенных обстоятельствах hibernate может отбрасывать и воссоздавать столбцы, если, например, вы измените тип данных в вашей сущности.Это одна из причин, по которой вы никогда не должны использовать ее для какой-либо производственной системы.
Лично я никогда бы не стал доверять автоматизированной структуре "черного ящика", которая обрабатывает изменения в модели данных в любых условиях, кроме строго локальных сред / dev.Я всегда настраивал его так, чтобы в локальных средах разработки вы могли делать create-drop.Как только пришло время начать продвижение вашего приложения в центральное тестирование / стадию и затем в prod, все изменения в базе данных делаются администратором базы данных с помощью старых добрых сценариев DDL.Данные слишком ценны, чтобы рисковать потенциальной ошибкой или неожиданным поведением в спящем режиме (или любой другой ORM / автоматизированной среде).Я даже проверяю, что пользователь базы данных, настроенный в моих приложениях, даже не имеет прав на создание / удаление / изменение в базе данных, просто чтобы предотвратить бедствия из-за неправильной конфигурации в спящем режиме.
Итак, чтобы ответить на вашвопрос - если вы хотите, чтобы hibernate всегда поддерживал вашу базу данных, точно отражающую ваши сущности, «create-drop» - ваш единственный вариант.Только никогда не используйте его ни на чем, кроме локальных баз данных разработчика.