1

我对分离副本的理解是它会复制您的对象,以便您可以在没有 PersistenceManager 注意到的情况下对其进行更改。

因为我在将模型对象传递给要使用的视图之前关闭了我的 PersistenceManager,所以在传递它之前我不必调用 detachCopy 或 makeTransient 之类的东西吗?

我看到的例子确实调用它......这是我从http://code.google.com/appengine/docs/java/datastore/creatinggettinganddeletingdata.html看到的例子:

public Employee getEmployee(User user) {
    PersistenceManager pm = PMF.get().getPersistenceManager();
    Employee employee, detached = null;
    try {
        employee = pm.getObjectById(Employee.class,
            "Alfred.Smith@example.com");

        // If you're using transactions, you can call
        // pm.setDetachAllOnCommit(true) before committing to automatically
        // detach all objects without calls to detachCopy or detachCopyAll.
        detached = pm.detachCopy(employee);
    } finally {
        pm.close();
    }
    return detached;
}
4

2 回答 2

1

如示例所述,您可以使用 PMF 属性自动分离对象,或手动分离它们的副本。现在问题是什么?

于 2010-02-10T19:21:20.913 回答
1

来自http://db.apache.org/jdo/attach_detach.html

分离的对象保留其数据存储实体的 ID。在您想要更新对象并稍后附加它们的地方应使用分离的对象(更新数据存储中的关联对象。如果您想在数据存储中创建具有自己身份的对象的副本,则应使用 makeTransient 而不是 detachCopy。

于 2013-11-03T22:28:15.183 回答