grails 3.2.6未能初始化测试数据;不是域类或GORM未正确初始化;
我用最新的v3.2.6创建了一个简单的grails应用程序。在grails app/domain中创建了作者和书籍类 grails应用程序/域中的book类如下所示(我还有一个books类) 和book域类的完整性grails 3.2.6未能初始化测试数据;不是域类或GORM未正确初始化;,grails,gorm,Grails,Gorm,我用最新的v3.2.6创建了一个简单的grails应用程序。在grails app/domain中创建了作者和书籍类 grails应用程序/域中的book类如下所示(我还有一个books类) 和book域类的完整性 package org.softwood class Book { String title Author author //static belongsTo = [author:Author] static constraints = {
package org.softwood
class Book {
String title
Author author
//static belongsTo = [author:Author]
static constraints = {
author nullable:true
}
}
我启动了app-no-errors,并尝试使用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.
所以我编辑了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)
试试这个
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.
}
}
试试这个
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.
}
}
奇怪的小精灵。在等待时-因损坏而报废,并再次重新创建一个全新的应用程序。重新创建作者/书籍片段并作为集成测试重新运行-它工作了,转到控制台并在交互式控制台上键入-它工作了。所以我不知道为什么以前的新安装不起作用,但显然坏了。非常奇怪的是,您的域类与您的
应用程序类在同一个包中吗?如果不是,您可能需要覆盖packageNames()
no-graeme它们不是-默认应用程序groovy在包“package coffeeshopapp”中-与项目相同。域类位于“package org.softwood”中。正如我提到的,在intellij中进行渐变清理似乎再次修复了问题——从命令行运行应用程序也是如此。你说的覆盖“packageNames()”是什么意思?我不知道你说的是什么意思。在等待时-因损坏而报废,并再次重新创建一个全新的应用程序。重新创建作者/书籍片段并作为集成测试重新运行-它工作了,转到控制台并在交互式控制台上键入-它工作了。所以我不知道为什么以前的新安装不起作用,但显然坏了。非常奇怪的是,您的域类与您的应用程序类在同一个包中吗?如果不是,您可能需要覆盖packageNames()
no-graeme它们不是-默认应用程序groovy在包“package coffeeshopapp”中-与项目相同。域类位于“package org.softwood”中。正如我提到的,在intellij中进行渐变清理似乎再次修复了问题——从命令行运行应用程序也是如此。重写“packageNames()”是什么意思?我不知道你的意思,它看起来不像是grails——当我在命令行上使用run app时,它工作得很好,当我尝试intellij内部的gradle clean时,它又开始工作了。这似乎是intellij失步和新一代停止正常工作的问题。运行clean操作有点像是在它上面-但不应该真的发生我不认为它看起来不像grails-当我在命令行上使用run应用程序时,它工作得很好,当我尝试intellij内部的gradle clean时,它又开始工作了。这似乎是intellij失步和新一代停止正常工作的问题。运行干净的动作有点像是在控制它,但我不认为真的应该发生