Hibernate - hibernate.hbm2ddl.auto = validate

Мне интересно, как работает hibernate.hbm2ddl.auto = validate, и я изо всех сил стараюсь найти исчерпывающую документацию.

Недавно мы обнаружили, что на производственную систему повлиял http://opensource.atlassian.com/projects/hibernate/browse/HHH-3532 (Hibernate сопоставляет внешние ключи по имени, а не подписи, и поэтому воссоздает их для вас) и hibernate.hbm2ddl.auto = обновление удаляется из нашей следующей версии.

Я был бы очень рад просто избавиться от hibernate.hbm2ddl.auto и сам управлять нашей базой данных. Однако не все мои коллеги разделяют это мировоззрение, и некоторые из них стремятся добавить обратно в hibernate.hbm2ddl.auto = validate.

Я обеспокоен тем, что это затронет ту же проблему, и мне интересно найти дополнительную документацию о том, как эта валидация действительно работает. Документация сообщества Hibernate (http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html) действительно просто ссылается на значения.

Есть ли у кого-нибудь хорошие указатели на документацию или какой-либо реальный опыт использования проверки в производственной системе?

Ответ 1

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

По-моему, лучшая документация - это исходный код, который вы можете проверить, чтобы увидеть, что именно происходит. Соответствующий метод org.hibernate.tool.hbm2ddl.SchemaValidator#validate().

Я быстро прошел код и не думаю, что SchemaValidator проверяет внешние ключи в базе данных: он проверяет наличие таблиц, столбцов, генераторов идентификаторов, но не внешних ключей. Тест на базу данных домашних животных, похоже, подтверждает это поведение: отказ от ограничения FK не нарушает проверку схемы (другими словами, проверяющий проверяет, может ли приложение работать, а не для ссылочной целостности).

Теперь HHH-3532 помечен как фиксированный, почему бы вам не перейти на более новую версию Hibernate или, если изменить версия Hibernate слишком тяжела, почему бы вам не применить патч для HHH-3532 самостоятельно?

Если все сказанное, я не использую hibernate.hbm2ddl.auto=update для обновления производственных баз, я использую скрипты изменений. Но я использую hibernate.hbm2ddl.auto=validate, и я доволен этим.