Откат миграции данных Grails

Привет, я пытаюсь сделать что-то очень простое с доменным классом Grails. Я добавляю в свой класс поле и хочу использовать плагин переноса данных для отката один раз, чтобы добавленное поле было удалено.

Сначала я создал первоначальный журнал изменений следующим образом:

Grails dbm-generate-changelogchangelog.groovy

Затем я добавил в файл Config.groovy следующее:

grails.plugin.databasemigration.updateOnStart = true grails.plugin.databasemigration.updateOnStartFileNames = ['changelog.groovy']

Затем я добавил дополнительное поле в свой класс домена и выполнил следующее:

grails dbm-gorm-diff добавлено-новое-поле.groovy --добавить

Я запустил приложение (grails run-app), после чего выполнил:

Grails dbm-rollback-count 1

После чего я снова запускаю приложение, используя: grails run-app, но поле все еще там.

Я использую MySQL для БД. Вот как я это настроил в DataSource.groovy:

dataSource {
    pooled = true
    driverClassName = "com.mysql.jdbc.Driver"
dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"
}
hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = false
    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
// environment specific settings
environments {
    development {
        dataSource {
        dbCreate = 'update'
            url = "jdbc:mysql://localhost/dashboard?useUnicode=yes&characterEncoding=UTF-8"
    username ="foo"
    password = "bar"
    }
}

..... and on.....

Может ли кто-нибудь объяснить мне, как выполняется откат? Я использую: миграция базы данных Grails 2.2.2: 1.3.2


person codeBarer    schedule 17.06.2013    source источник
comment
Я также пытался удалить dbCreate='update'... не повезло   -  person codeBarer    schedule 17.06.2013
comment
Я думаю, что это не должно быть удалено, но пусто: dbCreate = ''   -  person Kamil Mikolajczyk    schedule 17.06.2013
comment
После чего я снова запускаю приложение, используя: grails run-app, но поле все еще там. Поле в классе домена или столбец в таблице?   -  person James Kleeh    schedule 17.06.2013
comment
Я имел в виду, что этого поля больше не должно быть, так как я возвращаюсь к тому моменту, когда в схеме не было этого поля.   -  person codeBarer    schedule 17.06.2013


Ответы (1)


Когда выполняется grails dbm-rollback-count 1, он вносит изменения только в базу данных, используя файл журнала изменений groovy, беря самый последний набор изменений в журнале и отменяя его. Если вы снова запустите свое приложение, следующие строки в Groovy.config вернут эти поля в таблицы:

grails.plugin.databasemigration.updateOnStart = true grails.plugin.databasemigration.updateOnStartFileNames = ['changelog.groovy']

Я не совсем уверен, для чего нужны серверы dbm-rollback-count в моем случае, но это то, что он сделал. Я думал, что выполнение отката не только удалит последний набор изменений (добавленное поле) в базе данных, но также удалит эту переменную поля из класса домена.

person codeBarer    schedule 17.06.2013