gpt4 book ai didi

google-app-engine - 如何在GAE上为grails应用程序设置一对多单向映射?

转载 作者:行者123 更新时间:2023-12-02 15:39:56 25 4
gpt4 key购买 nike

我尝试使用JPA在Google App Engine(GAE)上的grails应用程序的一对多单向映射上执行测试。我尝试定义的一对多单向映射是在User和Role类之间。不幸的是,我被困住了。奇怪的是,那里是否有任何开发人员能够使其成功运行。

以下是我的开发环境:

  • Windows XP专业版
  • App Engine SDK 1.2.2
  • Grails 1.1.1
  • 使用的插件:app-engine 0.8.3,gorm-jpa 0.5

  • 源代码位于:
  • http://rapidshare.com/files/275369669/one2many.zip.html

  • 完整的错误堆栈跟踪在这里:
     [java] Sep 4, 2009 2:08:42 AM com.google.apphosting.utils.jetty.JettyLogger warn
    [java] WARNING: Failed startup of context com.google.apphosting.utils.jetty.DevAppEngineWebAppContext@1ebd75b{/,C:\Documents and Settings\limcheekin\.grails\1.1.1\projects\one2many\stage}
    [java] org.springframework.beans.factory.access.BootstrapException: Error executing bootstraps; nested exception is org.codehaus.groovy.runtime.InvokerInvocationException: org.springframework.orm.jpa.JpaSystemException: Class "com.vobject.grailsfuse.User" has collection field "roles" and this has no mapping in the table for the element class "com.vobject.grailsfuse.Role"; nested exception is javax.persistence.PersistenceException: Class "com.vobject.grailsfuse.User" has collection field "roles" and this has no mapping in the table for the element class "com.vobject.grailsfuse.Role"
    [java] at org.codehaus.groovy.grails.web.context.GrailsContextLoader.createWebApplicationContext(GrailsContextLoader.java:74)
    [java] at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
    [java] at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
    [java] at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:530)
    [java] at org.mortbay.jetty.servlet.Context.startContext(Context.java:135)
    [java] at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1218)
    [java] at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:500)
    [java] at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
    [java] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
    [java] at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
    [java] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
    [java] at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
    [java] at org.mortbay.jetty.Server.doStart(Server.java:217)
    [java] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
    [java] at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:152)
    [java] at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:116)
    [java] at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:218)
    [java] at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:162)
    [java] at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)
    [java] at com.google.appengine.tools.development.DevAppServerMain.<init>(DevAppServerMain.java:113)
    [java] at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:89)
    [java] Caused by: org.codehaus.groovy.runtime.InvokerInvocationException: org.springframework.orm.jpa.JpaSystemException: Class "com.vobject.grailsfuse.User" has collection field "roles" and this has no mapping in the table for the element class "com.vobject.grailsfuse.Role"; nested exception is javax.persistence. PersistenceException: Class "com.vobject.grailsfuse.User" has collection field "roles" and this has no mapping in the table for the element class "com.vobject.grailsfuse.Role"
    [java] ... 7 more
    [java] Caused by: org.springframework.orm.jpa.JpaSystemException: Class "com.vobject.grailsfuse.User" has collection field "roles" and this has no mapping in the table for the element class "com.vobject.grailsfuse.Role"; nested exception is javax.persistence.PersistenceException: Class "com.vobject.grailsfuse.User" has collection field "roles" and this has no mapping in the table for the element class "com.vobject.grailsfuse.Role"
    [java] at org.grails.jpa.JpaPluginSupport$__clinit__closure3_closure6_closure11_closure38.doCall(JpaPluginSupport.groovy:452)
    [java] at BootStrap$_closure1.doCall(BootStrap.groovy:13)
    [java] ... 7 more
    [java] Caused by: javax.persistence.PersistenceException: Class "com.vobject.grailsfuse.User" has collection field "roles" and this has no mapping in the table for the element class "com.vobject.grailsfuse.Role"
    [java] at org.datanucleus.jpa.NucleusJPAHelper.getJPAExceptionForNucleusException(NucleusJPAHelper.java:264)
    [java] at org.datanucleus.jpa.EntityTransactionImpl.commit(EntityTransactionImpl.java:122)
    [java] ... 9 more
    [java] Caused by: org.datanucleus.exceptions.NucleusUserException: Class "com.vobject.grailsfuse.User" has collection field "roles" and this has no mapping in the table for the element class "com.vobject.grailsfuse.Role"
    [java] at org.datanucleus.store.mapped.scostore.FKSetStore.<init>(FKSetStore.java:184)
    [java] at org.datanucleus.store.appengine.DatastoreFKSetStore.<init>(DatastoreFKSetStore.java:38)
    [java] at org.datanucleus.store.appengine.DatastoreManager.newFKSetStore(DatastoreManager.java:353)
    [java] at org.datanucleus.store.mapped.MappedStoreManager.getBackingStoreForCollection(MappedStoreManager.java:734)
    [java] at org.datanucleus.store.mapped.MappedStoreManager.getBackingStoreForField(MappedStoreManager.java:646)
    [java] at org.datanucleus.sco.backed.HashSet.<init>(HashSet.java:102)
    [java] at org.datanucleus.util.ClassUtils.newInstance(ClassUtils.java:94)
    [java] at org.datanucleus.sco.SCOUtils.newSCOInstance(SCOUtils.java:164)
    [java] at org.datanucleus.state.JDOStateManagerImpl.wrapSCOField(JDOStateManagerImpl.java:3040)
    [java] at org.datanucleus.store.fieldmanager.LoadFieldManager.internalFetchObjectField(LoadFieldManager.java:92)
    [java] at org.datanucleus.store.fieldmanager.AbstractFetchFieldManager.fetchObjectField(AbstractFetchFieldManager.java:104)
    [java] at org.datanucleus.state.AbstractStateManager.replacingObjectField(AbstractStateManager.java:1197)
    [java] at com.vobject.grailsfuse.User.jdoReplaceField(User.groovy)
    [java] at com.vobject.grailsfuse.User.jdoReplaceFields(User.groovy)
    [java] at org.datanucleus.state.JDOStateManagerImpl.replaceFields(JDOStateManagerImpl.java:2772)
    [java] at org.datanucleus.state.JDOStateManagerImpl.replaceFields(JDOStateManagerImpl.java:2791)
    [java] at org.datanucleus.state.JDOStateManagerImpl.loadFieldsInFetchPlan(JDOStateManagerImpl.java:1610)
    [java] at org.datanucleus.ObjectManagerImpl.performDetachAllOnCommitPreparation(ObjectManagerImpl.java:3192)
    [java] at org.datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:2931)
    [java] at org.datanucleus.TransactionImpl.internalPreCommit(TransactionImpl.java:369)
    [java] at org.datanucleus.TransactionImpl.commit(TransactionImpl.java:256)
    [java] at org.datanucleus.jpa.EntityTransactionImpl.commit(EntityTransactionImpl.java:104)
    [java] ... 9 more
    [java] Sep 4, 2009 2:08:42 AM com.google.apphosting.utils.jetty.JettyLogger warn
    [java] WARNING: Nested in org.springframework.beans.factory.access.BootstrapException: Error executing bootstraps; nested exception is org.codehaus.groovy.runtime.InvokerInvocationException: org.springframework.orm.jpa.JpaSystemException: Class "com.vobject.grailsfuse.User" has collection field "roles" and this has no mapping in the table for the element class "com.vobject.grailsfuse.Role"; nested exception is javax.persistence.PersistenceException: Class "com.vobject.grailsfuse.User" has collection field "roles" and this has no mapping in the table for the element class "com.vobject.grailsfuse.Role":
    [java] Class "com.vobject.grailsfuse.User" has collection field "roles" and this has no mapping in the table for the element class "com.vobject.grailsfuse.Role"
    [java] org.datanucleus.exceptions.NucleusUserException: Class "com.vobject.grailsfuse.User" has collection field "roles" and this has no mapping in the table for the element class "com.vobject.grailsfuse.Role"
    [java] at org.datanucleus.store.mapped.scostore.FKSetStore.<init>(FKSetStore.java:184)
    [java] at org.datanucleus.store.appengine.DatastoreFKSetStore.<init>(DatastoreFKSetStore.java:38)
    [java] at org.datanucleus.store.appengine.DatastoreManager.newFKSetStore(DatastoreManager.java:353)
    [java] at org.datanucleus.store.mapped.MappedStoreManager.getBackingStoreForCollection(MappedStoreManager.java:734)
    [java] at org.datanucleus.store.mapped.MappedStoreManager.getBackingStoreForField(MappedStoreManager.java:646)
    [java] at org.datanucleus.sco.backed.HashSet.<init>(HashSet.java:102)
    [java] at org.datanucleus.util.ClassUtils.newInstance(ClassUtils.java:94)
    [java] at org.datanucleus.sco.SCOUtils.newSCOInstance(SCOUtils.java:164)
    [java] at org.datanucleus.state.JDOStateManagerImpl.wrapSCOField(JDOStateManagerImpl.java:3040)
    [java] at org.datanucleus.store.fieldmanager.LoadFieldManager.internalFetchObjectField(LoadFieldManager.java:92)
    [java] at org.datanucleus.store.fieldmanager.AbstractFetchFieldManager.fetchObjectField(AbstractFetchFieldManager.java:104)
    [java] at org.datanucleus.state.AbstractStateManager.replacingObjectField(AbstractStateManager.java:1197)
    [java] at com.vobject.grailsfuse.User.jdoReplaceField(User.groovy)
    [java] at com.vobject.grailsfuse.User.jdoReplaceFields(User.groovy)
    [java] at org.datanucleus.state.JDOStateManagerImpl.replaceFields(JDOStateManagerImpl.java:2772)
    [java] at org.datanucleus.state.JDOStateManagerImpl.replaceFields(JDOStateManagerImpl.java:2791)
    [java] at org.datanucleus.state.JDOStateManagerImpl.loadFieldsInFetchPlan(JDOStateManagerImpl.java:1610)
    [java] at org.datanucleus.ObjectManagerImpl.performDetachAllOnCommitPreparation(ObjectManagerImpl.java:3192)
    [java] at org.datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:2931)
    [java] at org.datanucleus.TransactionImpl.internalPreCommit(TransactionImpl.java:369)
    [java] at org.datanucleus.TransactionImpl.commit(TransactionImpl.java:256)
    [java] at org.datanucleus.jpa.EntityTransactionImpl.commit(EntityTransactionImpl.java:104)
    [java] at org.grails.jpa.JpaPluginSupport$__clinit__closure3_closure6_closure11_closure38.doCall(JpaPluginSupport.groovy:452)
    [java] at BootStrap$_closure1.doCall(BootStrap.groovy:13)
    [java] at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:152)
    [java] at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:116)
    [java] at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:218)
    [java] at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:162)
    [java] at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)
    [java] at com.google.appengine.tools.development.DevAppServerMain.<init>(DevAppServerMain.java:113)
    [java] at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:89)

    请指教。看看您对出什么问题有任何想法...

    谢谢。

    最佳答案

    对于更新,我将appengine-gorm插件发布到grails插件存储库,这是我编写该插件以支持批量插入操作的动机。经过多次尝试后,由于无法使用在Google App Engine中运行的注释(@OneToMany)建立一对多关系,因此我决定手动管理该关系,而不使用映射。但是,当我尝试在一对多关系的许多方面保存对象时,我面临着Google App Engine请求超时的问题。然后,我发现数据存储支持的低级API在一个API调用中保留了许多对象,因此该插件诞生了。希望对您和其他人有益。

    最后,我设法使一对多关系手动工作并且没有映射。请在http://grailsfuse.vobject.com/观看名为GrailsFuse的实时演示应用程序。

    欢迎您提出反馈和意见。请随时通过limcheekin vobject dot com给我发送电子邮件。

    谢谢。

    关于google-app-engine - 如何在GAE上为grails应用程序设置一对多单向映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1377091/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com