为什么grails-2.0.1无法在引导类init方法中创建用户、角色和用户角色域对象?

为什么grails-2.0.1无法在引导类init方法中创建用户、角色和用户角色域对象?,grails,bootstrapping,Grails,Bootstrapping,嗨,我是Grails平台的新手 我可以使用SpringSecurity核心插件在grails-1.3.7版本的引导类init方法中创建User、Role和UserRole域对象。。。但在grails-2.0.1版本中却不能做到这一点 下面是我试图执行的代码 import com.beshto.Role import com.beshto.User import com.beshto.UserRole import grails.util.Environment class BootStrap

嗨,我是Grails平台的新手

我可以使用SpringSecurity核心插件在grails-1.3.7版本的引导类init方法中创建User、Role和UserRole域对象。。。但在grails-2.0.1版本中却不能做到这一点

下面是我试图执行的代码

import com.beshto.Role
import com.beshto.User
import com.beshto.UserRole
import grails.util.Environment

class BootStrap {

  def init = {  servletContext ->
    switch (Environment.current) {
      case Environment.DEVELOPMENT:
        createInitialUsersIfRequired()
        break;
      case Environment.PRODUCTION:
        println "No special config or Bootstrapping required for the Production version..."
        break;
    }
  }

  def destroy = {
  }

  void createInitialUsersIfRequired() {
    println "Creating special config / Bootstrapping for Development version admin/4321 and user/1234..."

    if(Role.list().size() == 0) {
      new Role(authority: 'ROLE_ADMIN').save(flush: true)
      new Role(authority: 'ROLE_USER').save(flush: true)
    }

    if(User.count() == 0){
      def newAdmin = new User(username: 'admin', enabled: true, password: '4321').save(flush: true)
      def newUser = new User(username: 'user', enabled: true, password: '1234').save(flush: true)

      UserRole.create newAdmin, Role.findByAuthority('ROLE_ADMIN'), true
      UserRole.create newUser, Role.findByAuthority('ROLE_USER'), true

      assert User.count() == 2
      assert Role.count() == 2
    }
  }
}

任何帮助都将不胜感激

我带着同样的问题来到这里,一直玩到成功

我不能百分之百确定是哪一个改变让它起作用了,但以下是我所做的:

  • 将引号更改为双引号,因此“代替”。 用户名:“admin”将是用户名:“admin”
  • 我想这可能导致了一些java问题。我不确定

    检查您的用户和角色是否已实际保存!按照上面的建议添加失败时错误

    然后转到User、Role和UserRole类,确保已定义的每个变量都已设置。即使没有任何约束,如果有字符串,也只需将空字符串赋给它“”。原因可能是它可以接受空字符串,但不接受空字符串

    这就是我解决问题的原因。这很难解决,因为终端没有有价值的输出,我不得不考虑不同的事情

    我希望这能解决您的问题。这可能与不满足对象字段约束的保存有关

    如果它不起作用,请告诉我,并尝试提供更多信息


    祝你好运!

    检查角色创建方法。尝试更改:

    新角色(权限:'Role\u ADMIN')。保存(flush:true)

    为了

    新角色(权限:'Role\u USER')。保存(failOnError:true)

    用户的情况也一样。例如:

    new User(username: 'admin', enabled: true, password: '4321').save(failOnError: true)
    
    而不是

    new User(username: 'admin', enabled: true, password: '4321').save(flush: true)
    

    将:
    .save(刷新:真)
    更改为
    .save(刷新:真,失败者错误:真)
    如果域对象未通过验证,将导致您获得stacktrace。我怀疑这是问题所在,因为它在1.3.7中工作,但可能值得一看。在安装插件后,您已经运行了
    grails s2 quickstart com.beshto User Role UserRole
    ,不是吗?@tim_yates我想如果他放弃,他会得到一个编译错误奥滕说,因为课程是imported@Don是的,但当人们在提问时(似乎有意地)迟钝的时候,总是值得一问……这里不是故意迟钝的……也许我缺乏像你一样清晰的表达技巧:-(…Don,感谢您指出..是的,我运行了s2快速启动..@Jarred Olsen,非常感谢您提供的提示..错误消息:在save()期间发生验证错误:-字段“profile”上的对象“com.beshto.User”中的字段错误:拒绝值[null]…但在grails-1.3.7..即hibernate-plugin-1.3.7中不会发生此情况