Java:Google App Engine JDO对象不会更新

时间:2010-08-14 21:47:00

标签: java google-app-engine persistence jdo

我使用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;
    }
}

0 个答案:

没有答案