如何在开发中更改Grails域类时避免丢失DB

Fle*_*tch 3 grails grails-orm grails-domain-class grails-2.0

Grails 2.0的一个优点是您可以在开发中更改域类,而无需重新启动应用程序服务器.这是有效的,但是当我更改域类时,我丢失了所有的引导数据,这基本上违背了目的.我正在使用默认的h2数据库.

解决这个问题的最佳方法是什么?我是否必须去像Postgres这样的外部数据库?

Ian*_*rts 6

DataSource.groovy新创建的Grails 2应用程序中的默认值

environments {
    development {
        dataSource {
            dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
            url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
        }
    }
Run Code Online (Sandbox Code Playgroud)

create-drop意味着每当应用程序重新启动时,都将从头开始重新创建数据库.如果您希望数据库在重新启动后持续存在,请将其更改为类似的内容

dataSource {
    dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', ''
    url = "jdbc:h2:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
}
Run Code Online (Sandbox Code Playgroud)

(即改变create-dropupdate和删除:memurl).但请注意,并非您对域类所做的所有更改都可以反映在update可应用的有限架构更改中.添加属性应该没问题,但删除属性或更改影响模式生成的约束可能需要您删除并重新创建数据库(停止应用程序,删除devDb文件并再次启动它).