Почему мои обновления не работают? - PullRequest
4 голосов
/ 13 июля 2010

Я новичок в GAE, и в JDO я застреваю с тем, как обновлять данные.

Используя приведенный ниже код, если я делаю getAll(), то get() для объекта, затем измените атрибут для этого объекта, возвращаемый get (), затем getAll(), второй вызов getAll() возвращает исходный неизмененный объект.

Я попытался сделать flush (), но этопохоже не помогает.Если я перезапущу причал, данные не сохранятся.

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 ]

3 голосов
/ 13 июля 2010

Для хорошего обзора посмотрите на эти статьи:
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 голос
/ 13 июля 2010

Вы смотрели в AppEngine Руководство по началу работы ?У них есть довольно обширное руководство по с использованием JDO API .

Похоже, вы не вызываете close () после изменения постоянного объекта.

0 голосов
/ 13 июля 2010

Возможно, на самом деле может помочь закрытие ваших PersistenceManagers (не говоря уже о причинах использования памяти!)

0 голосов
/ 13 июля 2010

Я не очень знаком с JDO, но вам не нужно совершать () или сохранять () ваши данные перед сбросом?Я думаю, что только эти заявления будут сохраняться в базе данных.

...