JDO - 更新对象

时间:2009-04-17 17:08:54

标签: java google-app-engine jdo

我正在尝试使用Google App Engine和持久选项JDO。 我想知道是否可以将瞬态对象映射到持久对象?或者使用瞬态对象来更新持久对象?

我在编码示例中看到以下代码片段来更新对象:

public void updateEmployeeTitle(User user, String newTitle) {
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
    Employee e = pm.getObjectById(Employee.class, user.getEmail());
    if (titleChangeIsAuthorized(e, newTitle) {
        e.setTitle(newTitle);
    } else {
        throw new UnauthorizedTitleChangeException(e, newTitle);
    }
} finally {
    pm.close();
}
}

但这不是我想要的,有人知道我是否可以像JPA那样更新整个对象:object.update();

所以我想要这样的事情:

public User update(User u) {
    PersistenceManager pm = PMF.get().getPersistenceManager();
    User usr;
    try {
        usr = pm.getObjectById(User.class, u.getId());
        // copy transient object u to persist object usr.
                    // on update of usr all changes in object u are persistent.

    } finally {
        pm.close();
    }

    return u;
}

1 个答案:

答案 0 :(得分:2)

“瞬态”对象没有“身份”,因此无法在数据存储中找到它。如果您想使用瞬态对象,或者仅使用分离对象是否更好,请仔细考虑。 JPA使用等效的“分离”对象。 JDO也可以这样做,然后你只需要调用pm.makePersistent(detachedObj);

- 安迪(DataNucleus