【发布时间】:2013-02-21 20:21:11
【问题描述】:
我正在使用 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;
}
【问题讨论】:
-
如果我正确理解了您的问题,您需要查找当前持久化的
Topic,用新值更新它,然后再次持久化它。正如 DN 在他的回答中所说,持久化一个Transient(即我不确定那是什么,但假设它是一个新创建的 java 对象),只会持久化一个新对象。我猜数据存储应用了覆盖机制,而不是 DN(即由于唯一密钥违规)。我可以问一下,如果你不归还它,你为什么要把它分开?我还在学习,所以我不会反对你的代码或任何东西。 -
您好,感谢您的回答!它帮助我以其他方式思考它并帮助我解决问题。我真的没有任何解释要分离它。我补充说的只是一些绝望的“也许这会有所帮助”。后来删除了该行,因为它没有任何效果。
标签: google-app-engine gwt google-cloud-datastore jdo datanucleus