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

#sql #grails #null #nullable #alter-table

#sql #grails #null #nullable #alter-table

Вопрос:

У меня есть класс домена со строковым полем, которое я изменяю на nullable. В DataSource.groovy у меня установлен режим «обновить». Есть ли какой-либо способ заставить grails изменять MySQL без изменения на «create» или «create-drop». Мне нужны данные в 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 вручную является единственным способом, как правильно написать команду SQL, чтобы я сохранил индекс ключа между классами домена?

Комментарии:

1. Кажется, что если я просто сделаю «ALTER TABLE myProejct_my_domain_class MODIFY other_thing_id bigint(20) NULL;», ничего не сломается. Все еще хотелось бы знать, использую ли я Datasource.groovy неправильно или какой-либо другой простой ответ.

Ответ №1:

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

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

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

Комментарии:

1. Есть ли руководство или что-то в этом роде, документация на этой странице кажется немного скудной даже для Grails wiki…

2. Попробуйте grails-plugins.github.com/grails-database-migration/docs/manual/…