#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/…