Java: объекты JDO Google App Engine не обновляются - PullRequest
1 голос
/ 15 августа 2010

Я получаю объект из хранилища данных, используя JDO и PersistenceManager, используя некоторые методы, которые я построил.

String email = request.getParameter("email");
MyUser user = MyUser.all(myPersistentManager).filter("email", email).get();

это дает мне пользователя с указанным адресом электронной почты, который был сохранен во время другого сеанса. Работает отлично. Но проблема у меня заключается в следующем шаге. Я хочу обновить некоторую информацию:

user.setPrivilage(newPrivilage);

Привилегия - это тип моего собственного перечисления. Используя отладчик, после того, как я прошёл эту строку кода, я проверяю выражение на user.getPrivilage(), которое возвращает newPrivilage, как и ожидалось. Однако, когда я иду к сервлету, который распечатывает всех пользователей и их привилегии, он все равно показывает привилегию по умолчанию для всех пользователей. Или, другими словами, это изменение не было сохранено в базе данных. Я попытался изменить просто простое строковое значение сразу после этого, просто чтобы убедиться, что я не ошибся с моим объектом Enum. Поэтому я добавил это сразу после предыдущего набора вызова:

user.setEmail("your@mother.com");

Я запускаю его, снова использую отладчик, чтобы обнаружить, что он был изменен локально. Когда я запускаю свой другой сервлет «Все пользователи», пользователь печатается с его оригинальным адресом электронной почты. Поэтому обновления не сохраняются.

Я прочитал примеры и документацию Google и подтвердил, что я поступаю аналогично. Я прочитал, что вы должны загрузить объект, используя PersistenceManger, чтобы сохранить его. Что я и делаю.

Любая помощь?

Вот мой боб:

@PersistenceCapable
public class MyUser extends ModelBase
{
    @PrimaryKey
    @Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent
    private String email;

    @Persistent
    private UserPrivilage privilage;

    public String getEmail()
    {
        return email;
    }

    public void setEmail(String email)
    {
        this.email = email;
    }

    public UserPrivilage getPrivilage()
    {
        return privilage;
    }

    public void setPrivilage(UserPrivilage privilage)
    {
        this.privilage = privilage;
    }

    public Key getKey()
    {
        return key;
    }
}
...