Я получаю объект из хранилища данных, используя 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;
}
}