Hibernate - hibernate.hbm2ddl.auto = проверить - PullRequest
15 голосов
/ 23 апреля 2010

Меня интересует, как на самом деле работает 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) действительно просто ссылается на значения.

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

1 Ответ

23 голосов
/ 23 апреля 2010

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

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

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

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

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

...