首页 文章

Grails和Hibernate:未知实体:com.mypackage.Role

提问于
浏览
1

我有一个grails应用程序 . 我已经安装了spring security core plugin 2.0 RC2,我在BootStrap.groovy中创建角色,用户和请求映射Grails在运行应用程序时抛出以下错误 .

ERROR context.GrailsContextLoader  - Error initializing the application: Unknown entity: Role

这是我的Role类(由spring安全插件生成并修改为扩展AbstractActivity,是一个具有beforeInsert()方法/闭包并进行一些验证的抽象类) .

package com.mypackage

class Role extends AbstractDomain {

    String authority

    Date dateCreated
    Date lastUpdated
    User createdBy
    User updatedBy

    static mapping = {
        cache true
    }

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

            createdBy nullable: true
            updatedBy nullable: true
    }
}

AbstractDomain.groovy

package com.mypackage

import com.mypackage.User

class AbstractDomain implements Serializable {

transient springSecurityService

def beforeInsert() {

    if(null != springSecurityService) {

        User user = springSecurityService.getCurrentUser()

        if(null != user) {

            this.createdBy = user
        }
    }
}

}

BootStrap.groovy中

import com.mypackage.Role

class BootStrap {
    def init = { servletContext ->
          if (Role.findByAuthority('ROLE_ADMIN') == null)
                def adminRole = new Role(authority: 'ROLE_ADMIN').save(flush: true)
    }
    def destroy = {}
}

Config.groovy中

grails.plugin.springsecurity.userLookup.userDomainClassName ='com.mypackage.User'
grails.plugin.springsecurity.userLookup.authorityJoinClassName 'com.mypackage.UserRole'
grails.plugin.springsecurity.authority.className = 'com.mypackage.Role'
grails.plugin.springsecurity.requestMap.className = 'com.mypackage.Requestmap'
grails.plugin.springsecurity.securityConfigType = 'Requestmap'

如何解决未知实体问题?

4 回答

  • 0

    您应该在Config.groovy中进行以下配置,以便让Spring安全插件知道您用于角色持久性的类:

    grails.plugins.springsecurity.authority.className = "com.mypackage.model.Role"
    

    同样适用于用户:

    grails.plugins.springsecurity.userLookup.userDomainClassName = "com.mypackage.model.User"
    

    http://grails-plugins.github.io/grails-spring-security-core/docs/manual/guide/domainClasses.html#authorityClass

  • 0

    尝试更换

    import com.mypackage.Role
    

    import com.mypackage.model.Role
    
  • 0

    这似乎不是Spring Security问题 . 错误来自Grails - “未知实体:角色” . 当域类(或其他工件)中的包名与文件所在的文件夹不匹配时,通常会发生这种情况 .

    如果希望 Role 类位于 com.mypackage 包中,请确保该文件位于 grails-app/domain/com/mypackage/Role.groovy 中 . 名称也区分大小写,因此请确保文件夹和软件包名称也同意 . 此外,您可能没有看到人们犯错误,比如创建一个"com.mypackage"目录,将文件放在 grails-app/domain/com.mypackage/Role.groovy 中 . 任何这些问题都会导致您看到的不匹配 .

  • 1

    我找到了解决方案!我的AbstractDomain类由Role类扩展,位于'src/groovy'文件夹中,我忘了将其设为'abstract' . 然后我在 class 之前添加了 abstract 关键字,它就像魔法一样 . 谢谢@mgg给我的想法here

    所以,我的AbstractDomain类现在看起来像

    abstract class AbstractDomain implements Serializable {
    ...
    

相关问题