Google app engine Objectify-在事务中按id加载实体时不支持OperationException

Google app engine Objectify-在事务中按id加载实体时不支持OperationException,google-app-engine,objectify,Google App Engine,Objectify,我有一个从页面类继承的用户类。在一个事务中,我希望通过ID(从不同的实体获得)加载一个用户实体,但是我得到了一个由UnsupportedOperationException引起的LoadException。我使用的是objectify 4.0-rc2 User user = MyObjectifyService.ofy().load().type(User.class).id(info.user).now(); 例外情况是: com.googlecode.objectify.LoadExcep

我有一个从页面类继承的用户类。在一个事务中,我希望通过ID(从不同的实体获得)加载一个用户实体,但是我得到了一个由UnsupportedOperationException引起的LoadException。我使用的是objectify 4.0-rc2

User user = MyObjectifyService.ofy().load().type(User.class).id(info.user).now();
例外情况是:

com.googlecode.objectify.LoadException: Error loading Page(5629499534213120): null
at com.googlecode.objectify.impl.Transmog.load(Transmog.java:76)
at com.googlecode.objectify.impl.ConcreteEntityMetadata.load(ConcreteEntityMetadata.java:121)
at com.googlecode.objectify.impl.PolymorphicEntityMetadata.load(PolymorphicEntityMetadata.java:164)
at com.googlecode.objectify.impl.LoadEngine.load(LoadEngine.java:220)
at com.googlecode.objectify.impl.LoadEngine$1.nowUncached(LoadEngine.java:178)
at com.googlecode.objectify.impl.LoadEngine$1.nowUncached(LoadEngine.java:164)
at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
at com.googlecode.objectify.impl.Round$1.nowUncached(Round.java:73)
at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
at com.googlecode.objectify.LoadResult.now(LoadResult.java:25)
...
com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:487)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: java.lang.UnsupportedOperationException
    at java.util.AbstractList.remove(Unknown Source)
    at java.util.AbstractList$Itr.remove(Unknown Source)
    at java.util.AbstractList.removeRange(Unknown Source)
    at java.util.AbstractList.clear(Unknown Source)
    at com.googlecode.objectify.impl.translate.CollectionTranslatorFactory$1.loadListIntoExistingCollection(CollectionTranslatorFactory.java:66)
    at com.googlecode.objectify.impl.TranslatableProperty.executeLoad(TranslatableProperty.java:62)
    at com.googlecode.objectify.impl.translate.ClassTranslator.loadMap(ClassTranslator.java:115)
    at com.googlecode.objectify.impl.translate.MapNodeTranslator.loadAbstract(MapNodeTranslator.java:25)
    at com.googlecode.objectify.impl.translate.AbstractTranslator.load(AbstractTranslator.java:25)
    at com.googlecode.objectify.impl.Transmog.load(Transmog.java:82)
    at com.googlecode.objectify.impl.Transmog.load(Transmog.java:71)
    ... 68 more

您正在将数据加载到采集字段中。如果字段已经用一个集合初始化,Objectify将使用现有集合(因此可以使用带有特殊排序比较器的集合等)。看起来您已经用某种不可修改的列表初始化了集合字段


用一个普通的ArrayList或任何你想要的东西初始化列表。

也许它是相关的,但我不认为这里也有一个不可变的集合,但是当GAE关闭并第一次静止时会发生错误(更多详细信息如下:)

java.lang.NullPointerException
在com.googlecode.objectify.impl.Round$1.nowUncached上(Round.java:73)
位于com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
位于com.googlecode.objectify.util.ResultNowFunction.apply(ResultNowFunction.java:20)
位于com.googlecode.objectify.util.ResultNowFunction.apply(ResultNowFunction.java:9)
位于com.google.common.collect.Iterators$8.transform(Iterators.java:860)
位于com.google.common.collect.transformeditor.next(transformeditor.java:48)
位于com.googlecode.objectify.impl.Chunk.next(Chunk.java:27)
位于com.googlecode.objectify.impl.Chunk.next(Chunk.java:10)
位于com.google.common.collect.Iterators$5.next(Iterators.java:607)
位于com.google.common.collect.Iterators$peekinginimpl.peek(Iterators.java:1239)
位于com.googlecode.objectify.impl.ChunkingIterator.hasNext(ChunkingIterator.java:52)
在com.google.common.collect.Lists.newArrayList(Lists.java:144)上
在com.google.common.collect.Lists.newArrayList(Lists.java:125)上
位于com.googlecode.objectify.util.MakeListResult.translate(MakeListResult.java:21)
位于com.googlecode.objectify.util.MakeListResult.translate(MakeListResult.java:11)
在com.googlecode.objectify.util.ResultTranslator.nowUncached上(ResultTranslator.java:21)
位于com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
位于com.googlecode.objectify.util.ResultProxy.invoke(ResultProxy.java:34)
位于com.sun.proxy.$Proxy21.iterator(未知源)
位于java.util.Collections$UnmodifiableCollection$1。(Collections.java:1064)
位于java.util.Collections$UnmodifiableCollection.iterator(Collections.java:1063)
位于flexjson.transformer.IterabletTransformer.transform(IterabletTransformer.java:26)

可能值得注意的是,ID来自同一事务中加载的实体(就在引发异常的行之前),但带有transactionless()Objectify。请在Objectify的发布版本4.0.1Tried It中尝试此操作,它与4.0.1和4.1相同是的,实际上我使用的是Arrays.asList()这将创建一个不可变的列表。谢谢
java.lang.NullPointerException
    at com.googlecode.objectify.impl.Round$1.nowUncached(Round.java:73)
    at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
    at com.googlecode.objectify.util.ResultNowFunction.apply(ResultNowFunction.java:20)
    at com.googlecode.objectify.util.ResultNowFunction.apply(ResultNowFunction.java:9)
    at com.google.common.collect.Iterators$8.transform(Iterators.java:860)
    at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48)
    at com.googlecode.objectify.impl.Chunk.next(Chunk.java:27)
    at com.googlecode.objectify.impl.Chunk.next(Chunk.java:10)
    at com.google.common.collect.Iterators$5.next(Iterators.java:607)
    at com.google.common.collect.Iterators$PeekingImpl.peek(Iterators.java:1239)
    at com.googlecode.objectify.impl.ChunkingIterator.hasNext(ChunkingIterator.java:52)
    at com.google.common.collect.Lists.newArrayList(Lists.java:144)
    at com.google.common.collect.Lists.newArrayList(Lists.java:125)
    at com.googlecode.objectify.util.MakeListResult.translate(MakeListResult.java:21)
    at com.googlecode.objectify.util.MakeListResult.translate(MakeListResult.java:11)
    at com.googlecode.objectify.util.ResultTranslator.nowUncached(ResultTranslator.java:21)
    at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
    at com.googlecode.objectify.util.ResultProxy.invoke(ResultProxy.java:34)
    at com.sun.proxy.$Proxy21.iterator(Unknown Source)
    at java.util.Collections$UnmodifiableCollection$1.<init>(Collections.java:1064)
    at java.util.Collections$UnmodifiableCollection.iterator(Collections.java:1063)
    at flexjson.transformer.IterableTransformer.transform(IterableTransformer.java:26)