Как управлять эволюцией базы данных при использовании JPA?

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

Он использует JPA и в своем bootstrap вызывает Fixtures.Deletemodels(), (или что-то вроде этого).

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

Я развернул производственную систему как (без оператора nuke).

Теперь мне нужно развернуть большое обновление производственной системы. Множество классов изменилось, было добавлено и удалено. При тестировании на локальном уровне, не применяя nuking таблиц при каждом запуске, я столкнулся с проблемами синхронизации. Когда я пытался записывать или читать из таблиц, игра выдавала ошибки. Я открыл mysql и убедился, что таблицы были изменены лишь частично, а в некоторых случаях изменены неправильно. Даже если я установил режим DDL на "create" в моей конфигурации, JPA не может "понять", как согласовать изменения и соответствующим образом изменить мою схему.

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

Поэтому я начал изучать эволюции баз данных в Play и прочитал статью на сайте play framework об эволюциях баз данных. В статье говорилось о скриптах версий, но было сказано: "Если вы работаете с JPA, Hibernate может автоматически обрабатывать эволюции баз данных для вас. Эволюции полезны, если вы не используете JPA".

Итак, если JPA должен позаботиться об этом за меня, как мне развернуть большие обновления в большом приложении Play? До сих пор JPA не мог правильно внести изменения в схему, и приложение выдавало ошибки. Я не заинтересован в потере всех моих данных, поэтому исправление на dev "Fixtures.deleteModels()" не может быть использовано в prod.

Заранее спасибо, Josh

6
задан Joshua Gunder 28 February 2012 в 18:18
поделиться