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