Grails 3.0.10 Наследование GORM

Я создал новый проект профиля веб-API в Grails 3.0.10 и попытался настроить простую иерархию классов домена, подобную этой...

//Это находится в 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)

Если я уберу "extends Organization" из класса Acquirer, все будет работать нормально.

Любые советы по этому поводу?


person Karan    schedule 25.12.2015    source источник


Ответы (1)


Думаю, ваша проблема в том, что DomainObject не является доменным классом. Вы можете сделать его доменным классом, но я подозреваю, что в вашем случае больше подойдет трейт.

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
    }
}
person Emmanuel Rosa    schedule 26.12.2015
comment
Спасибо @EmmanuelRosa Это сработало. Но я не могу понять проблему с class DomainObject' as it works with class Organization extends DomainObject. The moment any other class inherits Organization, она начинает давать сбой. Есть мнение по этому поводу? - person Karan; 26.12.2015
comment
Мне кажется странным, что он работает только с классом организации, потому что я понимаю, что все классы, участвующие в экземпляре класса предметной области (кроме объекта), должны быть классами предметной области. - person Emmanuel Rosa; 26.12.2015