Objectify は、GAE Datastore でサポートされているタイプのみを保持できます。Java 型Class
はその 1 つではありません。
また、型 eraseにより、 fieldfooType
は一般的な引数情報を保持しません。
現在、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;