我的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}]必须是唯一的
答案 0 :(得分:1)
我认为您必须已经创建了具有权限“ROLE_ADMIN”或“ROLE_USER”的角色。由于唯一约束,第二次使用update运行时会出错。正在尝试使用相同的Authority名称创建角色,并且会引发错误。
您应该应用一个条件,以便在角色已经存在的情况下,您不应该再次尝试创建角色。