我有一个简单的@Entity类,带有标准的@Id Long id和几个字段。其中一个字段是Map。
@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。
由于
答案 0 :(得分:0)
没有得到MyPojo
的类定义,我认为它没有定义为@Entity
来自Objectify文档:
值可以是可以作为字段保留的任何类型,包括基本类型, 嵌入对象 和集合。
假设这是你的MyPojo
,它应该是这样的:
@Entity
class MyPojo {
String firstName;
String lastName;
Integer age;
}
它适用于您的更改的原因是因为您使用了基本类型作为地图的值。
答案 1 :(得分:-1)
当我修改现有实体的结构并在更改后查询它时,会遇到同样的问题。