使用Grails / GORM清除和恢复夹具数据

时间:2015-01-23 15:48:51

标签: grails gorm

我需要在控制器请求上重置GORM夹具数据(H2)。所以我创建了以下控制器......

def dataSource
FixtureLoader fixtureLoader
def index() {
    Sql sql = new Sql(dataSource)
    sql.execute("DROP ALL OBJECTS DELETE FILES")
    sql.close()
    fixtureLoader.load('f1','f2','f3')
}

我希望这能清除数据库,但是,我仍然会收到以下错误

  

[org.codehaus.groovy.grails.web.errors.GrailsExceptionResolver]   处理请求时发生NonUniqueObjectException:[GET]   已经有一个具有相同标识符值的不同对象   与会话相关联:[*]。 Stacktrace如下:   org.hibernate.NonUniqueObjectException:一个不同的对象   相同的标识符值已与会话关联:[*]

另一个奇怪的事情是,如果我进入dbconsole并使用' DROP ALL OBJECTS DELETE FILES'命令,当我去控制器时,我得到了同样的错误。即使我可以确认他们已经从数据库中消失了。

更新

所以我尝试了一些事情......

1。)' DROP ALL OBJECTS DELETE FILES'似乎在dbconsole中按预期工作。但代码

    Sql sql = new Sql(dataSource)
    sql.execute("DROP ALL OBJECTS DELETE FILES")
    sql.close()

似乎没有同样的效果。

2.)我添加了以下行

def sessionFactory
...
sql.close()
sessionFactory.currentSession.flush() //This one  
fixtureLoader.load('f1','f2','f3')

然后我在DB控制台中删除(因为SQL似乎失败了),然后运行。但是,当我再次运行该功能时,我仍然可以看到灯具。

1 个答案:

答案 0 :(得分:0)

为此,我基本上和accepted answer here ...

做了同样的事

在我的Bootstrap中,我创建了tmp文件,然后在调用控制器时,我将其作为脚本运行,一切都被重置。我还必须确保根据评论删除缓存。