我使用JDO和PersistenceManager从数据存储区获取一个对象,使用我构建的一些方法。
String email = request.getParameter("email");
MyUser user = MyUser.all(myPersistentManager).filter("email", email).get();
这会让我的用户拥有在另一个会话期间保留的给定电子邮件地址。它很棒。但我遇到的问题是下一步。我想更新一些信息:
user.setPrivilage(newPrivilage);
Privilage是我自己的枚举类型。使用调试器,在我跳过该行代码后,检查user.getPrivilage()
上的表达式,它正在按预期返回newPrivilage。但是,当我转到打印出所有用户及其Privilages的servlet时,它仍会显示所有用户的默认权限。或者换句话说,该更改未持久保存到数据库中。
我尝试改变一个简单的字符串值,只是为了确保它不是我用我的Enum对象做错了。所以我在上一次调用后立即添加了这个:
user.setEmail("your@mother.com");
我运行它,再次使用调试器发现它已在本地更改。当我运行其他所有用户servlet时,用户将使用其原始电子邮件地址进行打印。所以没有持续更新。
我已经阅读了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;
}
}