我是GAE的新手,对于JDO,我对如何更新数据感到困惑。
使用下面的代码,如果我执行getAll()
,然后在对象上执行get()
,则更改get()返回的该对象的属性,然后更改getAll()
,第二次调用getAll()
会返回原始未更改的对象。
我尝试过刷新()但似乎没有帮助。如果我重新启动jetty,则数据不会保留。
public class Notes {
@SuppressWarnings("unchecked")
public List<Note> getAll() {
PersistenceManager pm = PMF.instance().getPersistenceManager();
Query query = pm.newQuery("select from com.uptecs.google1.model.Note order by subject");
return (List<Note>) query.execute();
}
public void add(Note note) {
PersistenceManager pm = PMF.instance().getPersistenceManager();
pm.makePersistent(note);
pm.flush();
}
public Note get(long id) {
PersistenceManager pm = PMF.instance().getPersistenceManager();
return (Note)pm.getObjectById(Note.class, id);
}
public void update(Note note) {
PersistenceManager pm = PMF.instance().getPersistenceManager();
pm.flush();
}
}
答案 0 :(得分:3)
有关这些文章的详细概述:
http://www.ibm.com/developerworks/java/library/j-gaej1/
http://www.ibm.com/developerworks/java/library/j-gaej2/index.html
http://www.ibm.com/developerworks/java/library/j-gaej3.html
2和3是最相关的。
public void add(Note note) {
PersistenceManager pm = getPersistenceManagerFactory()
.getPersistenceManager();
try {
pm.makePersistent(note);
} finally {
pm.close();
}
}
答案 1 :(得分:1)
你看过AppEngine Getting Started Guide了吗?他们在using the JDO API上有一个非常广泛的指南。
听起来你不是calling close() after modifying持久对象。
答案 2 :(得分:0)
我对JDO不是很熟悉,但是你不必在刷新之前提交()或保存()你的数据吗?我认为只有这些陈述才会存在于数据库中。
答案 3 :(得分:0)
也许实际关闭你的PersistenceManagers可能会有所帮助(更别关注内存使用的原因!)