今まで Objectify を使っていたのですが、JDO を使ってコードを扱う必要が出てきました。具体的には、Objectify で簡単にできる基本的なことで問題が発生しています。オブジェクトがメンバーとして List または配列のいずれかを持っている場合、それを保持できません。
FileInfoのリストを含むクラスFileInfoBatch(ここでコードのインデントが失われました、理由はわかりません)があります:
@PersistenceCapable
public class FileInfoBatch implements Serializable{
private static final long serialVersionUID = 1L;
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private List<FileInfo> fileInfoList;
@Persistent
private String savedByUserEmail;
public FileInfoBatch(){
fileInfoList=new ArrayList<FileInfo>();
}
次に、リストに 1 つの FileInfo のみを含む FileInfoBatch (fib と呼ばれる) を RPC impl クラスに送信して永続化し、テストのためにすぐにクエリを実行します (デバッガーで)。
PersistenceManager pm = PMF.get().getPersistenceManager();
pm.makePersistent(fib);
Query query = pm.newQuery(FileInfoBatch.class, "savedByUserEmail == '"+ userEmail + "'");
List<FileInfoBatch> savedList = (List<FileInfoBatch>) query.execute();
FileInfoBatch persisted=savedList.get(0);
永続化された FileInfoBatch は、空の FileInfo リストで返されます。単一の Fileinfo メンバーを使用する場合、これは問題なく持続します。
このサイトではそのような基本的な問題は報告されていません。ドキュメントを確認しました: https://developers.google.com/appengine/docs/java/datastore/jdo/dataclasses
このような単純なストレージ タスクには、非常に複雑な作業が必要ですか? もしそうなら、Objectify の使用に戻ります。