为什么我的更新不起作用?

时间:2010-07-13 16:11:17

标签: java google-app-engine jdo

我是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(); 
}
}

4 个答案:

答案 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可能会有所帮助(更别关注内存使用的原因!)