GAE で簡単なアプリケーションを作成しました。これは私の単純なエンティティ/JDO クラスです
@PersistenceCapable(detachable = "true")
public class Domain implements Serializable{
@Persistent
private String url;
@Persistent
private String aliasName;
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
}
このクラスで CRUD 操作を実行しています。私がやっていることは、別のオブジェクトを追加してから、オブジェクトが既に作成されたエンティティを削除および編集するオプションを提供することを確認することです。ビュー ページの任意のエンティティに対して削除リンクをクリックすると。私はそれを削除します。問題は、そのエンティティを削除した後、ユーザーをビューページに再度リダイレクトして、エンティティが削除されたことをユーザーが確認できるようにすることです。しかし、ビューページを再度表示すると、ビューページにも削除されたエンティティが表示されます。エンティティが削除されていないことを意味します。ページを 3,4 回更新すると、そのエンティティは表示されませんでした。これは、エンティティが最初に削除されたためですが、このプロセスが完了するまでに時間がかかるためです。なぜ私はGAEのこの振る舞いに直面しているのか知りたいですか?? GAE または JDO での CRUD 操作の実行が遅い場合。エンティティを削除し、すべてのエンティティを表示するためのコードを共有しています。私のコードに何か問題がありますか教えてください。
@SuppressWarnings({ "rawtypes", "unchecked" })
public List retrieveDomains() {
PersistenceManager pm = PMFSingleton.get().getPersistenceManager();
Query query = pm.newQuery(Domain.class);
List<Domain> list = null;
List<Domain> detachedList = null;
try {
list = (List<Domain>) query.execute();
detachedList = new ArrayList<Domain>();
for (Domain obj : list) {
detachedList.add(pm.detachCopy(obj));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
query.closeAll();
pm.close();
}
return detachedList;
}
public void deleteDomain(String name) {
PersistenceManager pm = PMFSingleton.get().getPersistenceManager();
Domain domain = null;
Transaction txn = null;
try {
txn = pm.currentTransaction();
txn.begin();
domain = (Domain) pm.getObjectById(Domain.class,name);
pm.deletePersistent(domain);
txn.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if ( txn.isActive()) {
txn.rollback();
}
pm.close();
}
}