Google AppEngineで同期サービスを作成していますが、実際には機能していません。私がやりたいのは、エンティティProjectを同期し(永続化する必要があるかもしれません。コンテンツをコピーするだけかもしれません)、Projectタイプのエンティティを検索します(最初に永続化されたものと同じプロジェクトかもしれませんが、そうではありません。する必要があります)そしてそれを使用してタスクを同期します。これらはすべてトランザクションで発生する必要があるため、タスク同期が失敗すると、プロジェクトも削除されます。
何が問題なのかを簡単にテストして示すために、数行のコードを記述しました。このコードは完全に機能し、「ProjectFound」を表示します。
User user = userDao.findAll().get(0);
// Create a setup service...
Project project = new Project();
project.setName("TEST ABC");
project.setLastUpdated(new Date());
project.setUser(user);
projectDao.persist(project);
Project persistedProject = projectDao.find("TEST ABC", user);
if (persistedProject == null) {
System.out.println("Project not found...");
} else {
System.out.println("Project found!");
}
したがって、ここではトランザクションを使用しません。しかし、トランザクションでコードを実行すると、次のようになります。
User user = userDao.findAll().get(0);
Transaction tx = datastores.get().beginTransaction();
// Create a setup service...
Project project = new Project();
project.setName("TEST ABC");
project.setLastUpdated(new Date());
project.setUser(user);
projectDao.persist(project);
Project persistedProject = projectDao.find("TEST ABC", user);
if (persistedProject == null) {
System.out.println("Project not found...");
tx.rollback();
} else {
System.out.println("Project found!");
tx.commit();
}
いつも「プロジェクトが見つかりません...」と表示されます。では、永続化したばかりでまだコミットしていないオブジェクトをどのように読み取ることができますか?
ところで:私はtwig-persist 2.0RC1と最新のAESDK(1.7)を使用しています。
だから私の質問は、同じトランザクションでパーサイトされたデータをどのように読み取ることができるかということです。