0

我正在使用 JDO 为 GWT 项目在 GAE 中存储对象。我在创建新对象时遇到问题。我第一次创建对象时效果很好。但是第二次,它用另一个我觉得很奇怪的 Key 值覆盖了前一个。我应该说如果刷新页面我可以创建一个新对象。这是我正在使用的代码。post 参数是一个新对象,我认为数据存储实体上的新 ID 证明了这一点。我不明白我之前创建的对象去了哪里。

public static Post addPost(Post post) {
    PersistenceManager pm = PMF.get().getPersistenceManager();
    Transaction tx = pm.currentTransaction();
    try{
        tx.begin();
        post.getTopic().addPost(post);
        pm.makePersistent(post.getTopic());
        pm.detachCopyAll(post.getTopic());
        tx.commit();

    } finally {
        if (tx.isActive())
            tx.rollback();
        pm.close();
    }
    return post;
}
4

2 回答 2

0

建议您注意对象生命周期状态。根据公开可用的 JDO 规范,将瞬态对象传递给 persist 将使其持久化。您的Post类没有显示,也没有显示它在输入时的值或数据存储中的内容,也没有显示日志(它告诉您做了什么 PUT)

于 2013-03-07T07:44:32.767 回答
0

我现在解决了我的问题,它与数据存储没有任何关系。问题是我的主题是从客户那里传递过来的。该主题在页面加载时更新,此后从未更新。因此,我总是将旧主题传递给其中没有新添加帖子的函数。因此,它将“覆盖”主题帖子列表中的前一个元素。我通过在添加新帖子之前在服务器端查找主题来解决这个问题。

于 2013-03-08T17:08:19.000 回答