Objectify nur types supported by the GAE Datastore bestehen kann. Java Typ Class
ist nicht einer von ihnen.
Aufgrund von type erasure enthält das Feld fooType
keine Informationen zu generischen Argumenten.
Nun gibt es ein paar Möglichkeiten, Class
Typ zu speichern:
Shop nur den langen Namen der Klasse, konvertieren via @ PrePersist/@ Postload. Der Vorteil davon ist, dass Sie eine normale String-Eigenschaft erhalten, die Sie abfragen können.
@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"));
}
Serialize die Class
(da es Serializable
implementiert dies erlaubt ist). Dies wird Java-Serialisierung verwenden, um das Feld als Blob (max. 1 MB) zu erhalten. Es ist eine einfache Lösung, aber der Nachteil ist, dass die Eigenschaft nicht indiziert ist und nicht in Abfragen verwendet werden kann.
@Serialize
private Class<Foo> fooType;
Ich mag Beide Antworten, aber ich denke, es ist besser, wenn OP weiß, wie man Übersetzer schafft kann in Zukunft alles bestehen bleiben. – expert