我在 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();
}
}