В Grails необходимо изменить поле в доменном классе на обнуляемое после того, как я уже пошел в производство

У меня есть класс домена со строковым полем, которое я изменяю на nullable. В DataSource.groovy у меня установлен режим "обновление". Есть ли способ заставить Grails изменить MySql, не изменяя "создать" или "создать-падение". Мне нужны данные в MySql.

Следующий вопрос: я могу сделать это изменение вручную с помощью строки "ALTER TABLE myProject_my_domain_class MODIFY the_string varchar(20) NULL;" Это приемлемая практика? Также у меня та же проблема с полем, связывающим другой класс домена:

class myDomainClass {
  MyOtherDomainClass otherThing
}

меняется на

class myDomainClass {
  MyOtherDomainClass otherThing
  static constraints = {
    otherThing(nullable:true)
  }
}

Если ручной SQL ALTER является единственным способом, как правильно написать команду SQL, чтобы я сохранил индекс ключа между классами домена?

1 ответ

Решение

Вы пробовали плагин миграции базы данных?

http://www.grails.org/plugin/database-migration

Процесс его использования немного сложнее ручного, чем просто установка dbCreate="update", но он дает вам гораздо больший контроль и отслеживает изменения, например, делает столбец обнуляемым. Кроме того, вы можете проверить даже ваши небольшие изменения схемы в вашей системе контроля версий, чтобы у вас была запись об изменениях, которые вы делаете.

Другие вопросы по тегам