2010-04-23 7 views
10

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

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

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

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

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

ответ

17

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

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

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

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

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

+0

Спасибо Pascal. Я не отвечаю за производственные системы и, т. Д., Я не уверен, что почти достаточное количество регрессионных тестов приведет к тому, что я буду рад изменениям! Просматривая историю изменений, на днях я заметил, что она была первоначально настроена как validate, и кто-то обновил ее до «udpate». Учитывая это, я думаю, что безопаснее удалить его - надеюсь, кто-то с меньшей вероятностью добавит в целом строку, чем для того, чтобы подстроить значение в будущем! – azp74

Смежные вопросы