【问题标题】:Grails 3.0.10 GORM inheritanceGrails 3.0.10 GORM 继承
【发布时间】:2015-12-25 06:16:21
【问题描述】:

我在 Grails 3.0.10 中创建了一个新的 web-api 配置文件项目,并尝试像这样设置一个简单的域类层次结构......

//这是在testapi/src/main/groovy中

package test.api.common
class DomainObject {

    Date dateCreated
    Date lastUpdated
}

这是在 testate/grails-app/domain

package test.api
import test.common.DomainObject

class Organization extends DomainObject {

    String col1
    String col2

    static constraints = {
        col1 maxSize:35
        col2 maxSize:6
    }

    static mapping = {
        tablePerHierarchy false
    }
}

class Org1 extends Organization {

    String col3
}

当我尝试运行时得到以下异常

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.grails.datastore.gorm.config.GrailsDomainClassMappingContext]:  Constructor threw exception; nested exception is java.lang.NullPointerException
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:122)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:267)
... 66 more
Caused by: java.lang.NullPointerException
at org.grails.datastore.gorm.config.GrailsDomainClassPersistentEntity.getRootEntity(GrailsDomainClassPersistentEntity.java:203)
at org.grails.datastore.mapping.model.AbstractMappingContext.initializePersistentEntity(AbstractMappingContext.java:259)
at org.grails.datastore.mapping.model.AbstractMappingContext.addPersistentEntities(AbstractMappingContext.java:183)
at org.grails.datastore.gorm.config.GrailsDomainClassMappingContext.<init>(GrailsDomainClassMappingContext.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrConstructorNewInstance(ReflectiveInterceptor.java:1075)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)

如果我从 Acquirer 类中删除“扩展组织”,一切正常。

对此有何建议?

【问题讨论】:

    标签: grails inheritance grails-orm grails-3.0


    【解决方案1】:

    它认为您的问题是DomainObject 不是域类。您可以将其设为域类,但我怀疑 trait 会更适合您的情况。

    package test.api.common
    trait DomainObject {
    
        Date dateCreated
        Date lastUpdated
    }
    
    package test.api
    import test.common.DomainObject
    
    class Organization implements DomainObject {
    
        String col1
        String col2
    
        static constraints = {
            col1 maxSize:35
            col2 maxSize:6
        }
    
        static mapping = {
            tablePerHierarchy false
        }
    }
    

    【讨论】:

    • 谢谢@EmmanuelRosa 它奏效了。但我无法理解class DomainObject' as it works with class Organization extends DomainObject. The moment any other class inherits Organization 的问题,它开始失败。对此有何看法?
    • 我觉得奇怪的是它只适用于组织类,因为据我了解,域类实例中涉及的所有类(Object 除外)都必须是域类。
    猜你喜欢
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多