为什么在我设置dbCreate ="更新"时,我的Grails应用程序运行了。

时间:2015-06-12 05:45:24

标签: grails bootstrapping

我的Grails应用程序和引导程序在dbCreate="create"时工作正常,但当我将其更改为dbCreate="update"时,我在引导程序中获得了对象创建验证错误。我只是希望在重新启动应用程序时我的数据能够持续存在。从错误消息中可以看出,我违反了唯一的约束。也许数据库在重启时没有被清除?我已经尝试过" create-drop" 以下是代码和错误消息。任何见解都表示赞赏。

development {
    dataSource {
        dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
        url = "jdbc:h2:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;"
    }
}


class BootStrap {

    def init = { servletContext ->

        def adminRole = new com.testapp.Role(authority: 'ROLE_ADMIN').save(failOnError: true)
        def userRole = new com.testapp.Role(authority: 'ROLE_USER').save(failOnError: true)
}

消息:

  

在save()期间发生验证错误:    - 对象' com.testapp.Role'中的字段错误在字段'权限':被拒绝的值[ROLE_ADMIN];代码[com.testapp.Role.authority.unique.error。

     

类[{1}]的默认消息[属性[{0}]值[{2}]必须是唯一的

1 个答案:

答案 0 :(得分:1)

我认为您必须已经创建了具有权限“ROLE_ADMIN”或“ROLE_USER”的角色。由于唯一约束,第二次使用update运行时会出错。正在尝试使用相同的Authority名称创建角色,并且会引发错误。

您应该应用一个条件,以便在角色已经存在的情况下,您不应该再次尝试创建角色。