JDO - Обновление объекта - PullRequest
6 голосов
/ 17 апреля 2009

Я экспериментирую с 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 Ответ

2 голосов
/ 22 апреля 2009

«Переходный» объект не имеет «идентичности», поэтому нет способа найти его в хранилище данных. Тщательно продумайте, хотите ли вы использовать временные объекты или было бы лучше использовать отдельные объекты. JPA использует эквивалент «отдельного» объекта. JDO может сделать это тоже, и тогда вы просто вызываете pm.makePersistent (detachedObj);

- Энди ( DataNucleus )

...