我是grails noob,正在关注本教程:http://www.bobbywarner.com/2012/01/05/jump-into-grails-2-0/
我做:
类BootStrap {
def init = { servletContext ->
def adminRole = Role.findByAuthority('ROLE_ADMIN') ?: new Role(authority: 'ROLE_ADMIN').save(failOnError: true)
def userRole = Role.findByAuthority('ROLE_USER') ?: new Role(authority: 'ROLE_USER').save(failOnError: true)
def user1 = SecUser.findByUsername('bobby') ?: new SecUser(username: 'bobby', enabled: true, password: 'password').save(failOnError: true)
if (user1.authorities.contains(userRole)) {
SecUserRole.create(user1, userRole, true)
}
def user2 = SecUser.findByUsername('tony') ?: new SecUser(username: 'tony', enabled: true, password: 'password').save(failOnError: true)
if (user2.authorities.contains(userRole)) {
SecUserRole.create(user1, userRole, true)
}
if (user2.authorities.contains(adminRole)) {
SecUserRole.create(user1, adminRole, true)
}
assert SecUser.count() == 2;
...
但是当我启动时,我得到:
| Error 2013-08-31 22:29:14,027 [localhost-startStop-1] ERROR context.GrailsContextLoader - Error initializing the application: Assertion failed:
assert SecUser.count() == 2
| |
0 false
我检查数据库,并且SecUser表中没有SecUsers。
关于我在做什么错的任何想法吗?
谢谢
最佳答案
正如@grantmc指出的那样,添加flush:true
将有所帮助。但是代码还有其他问题。
一种是您应检查!contains
而不是contains
-如果“用户/角色”授予不存在,则对其进行授予。但是使用的方法效率低下-它返回所有现有记录并检查是否匹配。使用代理时,这也可能会失败,除非您创建良好的equals
和hashCode
方法(尽管此处不是这种情况)。检查该行是否存在要好得多,并且使用GORM很容易:
class BootStrap {
def init = { servletContext ->
def adminRole = Role.findByAuthority('ROLE_ADMIN') ?:
new Role(authority: 'ROLE_ADMIN').save(failOnError: true)
def userRole = Role.findByAuthority('ROLE_USER') ?:
new Role(authority: 'ROLE_USER').save(failOnError: true)
def user1 = SecUser.findByUsername('bobby') ?:
new SecUser(username: 'bobby', enabled: true, password: 'password').save(failOnError: true, flush: true)
if (!SecUserRole.findBySecUserAndRole(user1, userRole)) {
SecUserRole.create(user1, userRole, true)
}
def user2 = SecUser.findByUsername('tony') ?:
new SecUser(username: 'tony', enabled: true, password: 'password').save(failOnError: true, flush: true)
if (!SecUserRole.findBySecUserAndRole(user2, userRole)) {
SecUserRole.create(user2, userRole, true)
}
if (!SecUserRole.findBySecUserAndRole(user2, adminRole)) {
SecUserRole.create(user1, adminRole, true)
}
assert SecUser.count() == 2
assert SecUserRole.count() == 3
assert Role.count() == 2
}
}
关于grails - 无法将对象放入我的BootStrap.config中的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18553036/