JDO - 在将模型对象传递给视图之前,是否需要在模型对象上调用DetachCopy?

时间:2010-02-10 19:10:57

标签: java jdo

我对分离副本的理解是它创建了一个对象的副本,以便您可以在没有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;
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

  

分离的对象保留其数据存储区实体的ID。超脱   应在要更新对象和附加的位置使用对象   它们稍后(更新数据存储区中的关联对象。如果你   想要用自己的数据存储区创建对象的副本   身份你应该使用makeTransient而不是detachCopy。