Hibernate - Hibernate.hbm2ddl.auto = Validate
Вопрос
Я заинтересован в том, как Hibernate.hbm2ddl.auto = Validate на самом деле работает, и я изо всех сил пытаюсь найти комплексную документацию.
Мы недавно обнаружили производственную систему повлияли http://opensource.atlassian.com/projects/ibernate/browse/hhhh-3532. (Hibernate соответствует иностранным ключам по названию, а не подписью и так воссоздает их для вас), и hibernate.hbm2ddl.auto = обновление удаляется из нашего следующего выпуска.
Я был бы вполне рад просто избавиться от Hibernate.hbm2ddl.auto в целом и управлять нашей базой данных. Тем не менее, не все мои коллеги поделитесь этим миром, а некоторые стремятся добавить обратно в Hibernate.hbm2ddl.auto = Validate.
Я обеспокоен, что это ударит ту же проблему, и мне интересно найти больше документации о том, как эта проверка на самом деле работает. Документация с гибернацией сообщества (http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html.) действительно просто ссылается на значения.
У кого-нибудь есть хорошие указатели документации или любой реальный жизненный опыт использования Validate в производственной системе?
Решение
Я обеспокоен, что это ударит ту же проблему, и мне интересно найти больше документации о том, как эта проверка на самом деле работает.
На мой взгляд, лучшая документация - это исходный код, который вы могли бы проверить, чтобы увидеть, что происходит точно. Соответствующий метод org.hibernate.tool.hbm2ddl.SchemaValidator#validate()
.
Я быстро пошел через код и я не думай, что SchemaValidator
проверяет иностранные ключи в базе данных: Он проверяет наличие таблиц, колонн, идентификационных генераторов, но не зарубежных ключей. Тест против базы данных PET, по-видимому, подтверждает это поведение: падение ограничения FK не нарушает проверку схемы (другими словами, проверка проверки валидатора, если приложение может работать не для ссылочной целостности).
Сейчас, HHH-3532. Быть помеченным как фиксированные, почему вы не обновляете до более новой версии Hibernate или, если изменение версии Hibernate слишком тяжело, почему бы вам не применить патч для HHH-3532. сами?
Наличие того, что все сказано, я Не используйте hibernate.hbm2ddl.auto=update
Чтобы обновить производственные базы данных, я использую сценарии изменений. Но я использовать hibernate.hbm2ddl.auto=validate
И я доволен этим.