Objectify 只能持久化 GAE Datastore 支持的类型。Java 类型Class
不是其中之一。
此外,由于类型擦除,字段fooType
不包含通用参数信息。
现在,有几种存储Class
类型的方法:
只存储类的长名称,通过@PrePersist/@PostLoad 转换。这样做的好处是您将获得一个可以查询的普通字符串属性。
@Transient // tells Objectify to ignore field
public Class<Foo> fooType;
@PrePersist
public prePersist(Entity entity){
entity.setProperty("fooType", fooType.getName())
}
@PostLoad
public postLoad(Entity entity){
fooType = Class.forName(entity.getProperty("fooType"));
}
序列化(Class
因为它实现Serializable
了这是允许的)。这将使用 Java 序列化将字段保存为 Blob(最大 1Mb 大小)。这是一个简单的解决方案,但缺点是该属性没有被索引并且不能在查询中使用。
@Serialize
private Class<Foo> fooType;