Grails数据迁移回滚

时间:2013-06-17 05:46:43

标签: grails gorm grails-plugin grails-2.0 grails-domain-class

嗨我正在尝试使用Grails域类非常简单的东西。我在我的类中添加了一个字段,我想使用数据迁移插件进行一次回滚,以便删除我添加的字段。

首先,我创建了初始更改日志,如下所示:

grails dbm-generate-changelog changelog.groovy

然后我将以下内容添加到Config.groovy文件中:

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

然后我在域类中添加了一个额外的字段并执行了以下操作:

grails dbm-gorm-diff added-new-field.groovy --add

我运行了应用程序(grails run-app),之后执行了:

grails dbm-rollback-count 1

之后我再次使用:grails run-app运行应用程序 但是这个领域仍然存在。

我正在使用MySQL进行db。以下是我在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

1 个答案:

答案 0 :(得分:1)

执行 grails dbm-rollback-count 1 时,只使用groovy changelog字段对数据库进行更改,方法是记录日志中的最后一个更改并撤消该更改。如果再次运行应用程序,Groovy.config中的以下行将把这些字段放回表中:

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

我不确定在我的情况下dbm-rollback-count服务器的用途是什么,但它确实如此。 我认为执行回滚不仅会删除数据库中的最后一个变更集(添加的字段),还会从域类中删除该字段变量。