2016-01-20 39 views
1

context.GrailsContextLoaderListener错误初始化 应用:采用上类的方法[域类(auth.Role)] 外的Grails应用程序。如果在测试 的环境中正确使用模拟API或引导Grails运行。java.lang.IllegalStateException:上类的方法[域类]的Grails应用程序之外使用

java.lang.IllegalStateException:类[Domain Class(auth.Role)]上的方法在Grails应用程序之外使用。如果在正确使用模拟API或引导Grails 的测试环境中运行 。

此异常是在该行抛出:

def existingRole = Role.findByAuthority(role) // Code Interrupts 

Role.groovy

import org.bson.types.ObjectId 

class Role { 

    // static mapWith = 'mongo' (For mongoDb we have plugin, so this is working) 
    static mapWith = 'none' //(Migrating MongoDB to postgreSql so changed mapWith to 'none') 
    ObjectId id 
    String authority 

    static constraints = { 
     authority blank: false, unique: true 
    } 
} 

UserService.groovy

@Transactional 
class UserService { 

    def grailsApplication 

/** 
* Create Users with supplied roles 
* @param usersAndRoles map of user:role 
* 
* @return 
*/ 
def createUsers(def usersAndRoles) { 
    // [user:ROLE_USER, manager:ROLE_MANAGER, admin:ROLE_ADMIN] 
    // For supplied list of user:role, create user with role 
    usersAndRoles.each { key, value -> 
     def user = User.findByUsername(key) 
     if (!user) { 
      def fields = grailsApplication.config."${key}" 
      user = new User(username: fields.username, 
        password: fields.password, 
        email: fields.email, 
        passwordExpired: true).save(flush: true) 
     } 

     // Get the role for this user, set authorities to this role and save 
     def role = Role.findByAuthority(value) 
     user.authorities = [role] 
     user.save(flush: true) 
    } 
} 

/** 
* Create supplied roles 
* @param roles list of roles 
* @return 
*/ 
def createRoles(def roles) { 
    roles?.each { role -> 
     def existingRole = Role.findByAuthority(role) // Code Interrupts Here 
     if (!existingRole) { 
      new Role(authority: role).save(flush: true) 
     } 
    } 
} 
} 

回答

1

如果使用

static mapWith = 'none' 

也不会映射这个领域类的任何数据库,所以它不会被访问(因为它不是持久性的)。添加映射到任何数据库(它甚至可以是默认的h2数据库),它会再次工作。

相关问题