【发布时间】:2016-05-20 18:51:07
【问题描述】:
我有一个简单的@Entity 类,带有标准的@Id Long id 和几个字段。其中一个字段是地图。
@Entity
public class MyEntity{
@Id Long id;
@Index String fieldOne;
@Unindex int fieldTwo;
@Unindex int fieldThree;
@Unindex Map<String, MyPojo> map = new HashMap<>();
}
根据我收集到的信息,Objectify 将此地图视为嵌入实体。 当我使用以下方式查询列表时:
List<MyEntity> list = ofy().load().type(MyEntity.class).filter("fieldOne =", fieldList).list();
查询执行得很好,但是当我尝试对列表做任何事情时,我得到了这个异常
java.util.ArrayList 无法转换为 com.google.appengine.api.datastore.EmbeddedEntity
使用这些方法后,当我触摸查询时也会引发此异常:
Map<Long, MyEntity> query = ofy().load().type(MyEntity.class).ids(idsList);
或
Map<Key<MyEntity>, MyEntity> query= ofy().load().keys(iterableOfKeys);
现在在一些测试中,我发现如果我将地图更改为
@Unindex Map<String, Integer> map = new HashMap<>();
一切都很好。以上所有查询都有效,我可以对其进行迭代等等。所以我的问题是我错过了什么?我尝试这一切都是错的还是有更好的方法来解决这个问题?
我使用的是最新版本的 Objectify 5.1.12。
谢谢
【问题讨论】:
-
你能发布完整的堆栈跟踪和 MyPojo 的定义吗?
-
在没有解决它之后,我构建了一个工作来继续前进。看到您的评论后,我返回并恢复该字段以使用 Map
使其再次失败以收集堆栈跟踪,但它没有。现在一切正常。我很困惑。在此之前,我将地图字段作为索引列表,当我将其更改为 Unindex Map 时出现了问题。也许是索引导致了问题,并且索引更改需要几个小时才能发生。现在地图工作正常,我无法从客户端返回的 JsonMap 中获取 MyPojo。铸造不起作用。任何想法 -
我真的不明白你在问什么。提问时,请描述导致问题的步骤并发布完整的堆栈跟踪。如果您在数据库中存储的数据不是 Java 类的“形状”,那么您可能会遇到各种问题。
标签: android google-app-engine objectify