2017-02-13 62 views
1

我已经创建了一个简单的grails应用程序和最新的v3.2.6。在grails-app/domain中创建了一个Authors和Book类。 Grails中,应用grails 3.2.6未能初始化测试数据“不是域类,或者GORM没有正确初始化”

书类/域看起来是这样的(我有一个书类也)

package org.softwood 

//Author has many books logical model 

class Author { 

    String name 
    Collection books 

    //static hasMany = [books:Book] 

    static constraints = { 
     books nullable:true 
    } 
} 

和书籍领域类的完整性

package org.softwood 

class Book { 

    String title 
    Author author 

    //static belongsTo = [author:Author] 

    static constraints = { 
     author nullable:true 
    } 
} 

我开始应用 - 没有任何错误和试图用grails控制台创建Author的实例并得到这样的错误

java.lang.IllegalStateException: Either class [org.softwood.Author] is not a domain class or GORM has not been initialized correctly or has already been shutdown. Ensure GORM is loaded and configured correctly before calling any methods on a GORM entity. 

so i编辑BootStrap.groovy来尝试像这样在启动时创建一个。为什么它没有正确地提出Gorm?

import org.softwood.* 

class BootStrap { 

    def init = { servletContext -> 
     environments { 
      development{ 
       createDevData() 
      } 
      test {} 
      production {} 
     } 
    } 
    def destroy = { 
    } 

    def createDevData() { 
     Author a = new Author(name:"will") 
     def res = a.save (flush:true, failOnExit:true) 
     assert res 
     assert Author.get(1).name == "will" 
    } 
} 

这个错误,当我开始用同样的消息,堆栈跟踪应用程序如下

java.lang.IllegalStateException: Either class [org.softwood.Author] is not a domain class or GORM has not been initialized correctly or has already been shutdown. Ensure GORM is loaded and configured correctly before calling any methods on a GORM entity. 
    at org.grails.datastore.gorm.GormEnhancer.stateException(GormEnhancer.groovy:387) 
    at org.grails.datastore.gorm.GormEnhancer.findInstanceApi(GormEnhancer.groovy:273) 
    at org.grails.datastore.gorm.GormEnhancer.findInstanceApi(GormEnhancer.groovy:270) 
    at org.grails.datastore.gorm.GormEntity$Trait$Helper.currentGormInstanceApi(GormEntity.groovy:1326) 
    at org.grails.datastore.gorm.GormEntity$Trait$Helper.save(GormEntity.groovy:151) 
    at org.grails.datastore.gorm.GormEntity$Trait$Helper$save.call(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133) 
    at org.softwood.Author.save(Author.groovy) 
    at org.softwood.Author.save(Author.groovy) 
    at org.grails.datastore.gorm.GormEntity$save.call(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) 
    at test.BootStrap.createDevData(BootStrap.groovy:21) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) 
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) 
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:384) 
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1024) 
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:69) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:158) 
    at test.BootStrap$_closure1$_closure3$_closure4.doCall(BootStrap.groovy:10) 
    at test.BootStrap$_closure1$_closure3$_closure4.doCall(BootStrap.groovy) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) 
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) 
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294) 
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1024) 
    at groovy.lang.Closure.call(Closure.java:414) 
    at groovy.lang.Closure.call(Closure.java:408) 
    at grails.util.Environment$EnvironmentBlockEvaluator.execute(Environment.java:529) 
    at grails.util.Environment.executeForEnvironment(Environment.java:510) 
    at grails.util.Environment.executeForCurrentEnvironment(Environment.java:485) 
    at org.grails.web.servlet.boostrap.DefaultGrailsBootstrapClass.callInit(DefaultGrailsBootstrapClass.java:62) 
    at org.grails.web.servlet.context.GrailsConfigUtils.executeGrailsBootstraps(GrailsConfigUtils.java:65) 
    at org.grails.plugins.web.servlet.context.BootStrapClassRunner.onStartup(BootStrapClassRunner.groovy:53) 
    at grails.boot.config.GrailsApplicationPostProcessor.onApplicationEvent(GrailsApplicationPostProcessor.groovy:256) 
    at grails.boot.config.GrailsApplicationPostProcessor.onApplicationEvent(GrailsApplicationPostProcessor.groovy) 
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167) 
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) 
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:383) 
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:337) 
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:882) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:144) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:545) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762) 
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:372) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) 
    at grails.boot.GrailsApp.run(GrailsApp.groovy:83) 
    at grails.boot.GrailsApp.run(GrailsApp.groovy:388) 
    at grails.boot.GrailsApp.run(GrailsApp.groovy:375) 
    at grails.boot.GrailsApp$run.call(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133) 
    at test.Application.main(Application.groovy:8) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
+0

怪异的小鬼。等待 - 报废,并重新创建一个全新的应用程序。重新创建了作者/书籍,并重新运行为集成测试 - 它工作,去控制台并在交互式控制台上键入 - 它的工作。所以我不知道为什么以前的新鲜安装不起作用 - 但明显破碎。非常奇怪 –

+0

你的域类与你的'Application'类是否在同一个包中?如果不是,你可能需要重写'packageNames()' –

+0

不要graeme他们不是 - 默认的应用程序groovy是在包“包coffeeshopapp” - 与项目相同。域类位于“包org.softwood”中。正如我所提到的,在intellij中做一个gradle clean似乎再次修复 - 就像命令行中的run-app一样。如何重写“packageNames()”不确定你的意思 –

回答

0

尝试用这种

package org.softwood 

//Author has many books logical model 

class Author { 

    String name 
    //Collection books 

    static hasMany = [books:Book] 

    static constraints = { 
     books nullable:true // you may not need this. 
    } 
} 
+0

没有看起来像它是grails - 当我在命令行上使用run-app时,它工作正常,当我试图在intellij里面进行gradle clean时,它开始工作再次。似乎是intellij失去了一步,并停止正常工作的问题。运行干净的行动排序 - 但不应该真的发生我不认为 –