Обновление коллекции зависимых объектов - PullRequest
0 голосов
/ 17 июля 2010

У меня есть класс Event и зависимый класс Entry, экземпляры которого действительны только в контексте события.

Как лучше всего смоделировать это в JDO?На самом деле я не хочу запрашивать записи только для событий и их записей.Так нужен ли мне ключ для входа?

Мое текущее решение:

@PersistenceCapable
public class Event {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    public Long id;

    @Persistent
    public List<Entry> entries = new ArrayList<Entry>();
}

@PersistenceCapable
public class Entry {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    public Key key;

    @Persistent
    public String name;
}

Я пытался добавить запись в существующее событие, но оно не сохранило действительное измененное событие.:

Event e = null;
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
    e = pm.getObjectById(Event.class, Long.parseLong(id));

    System.out.println(e.entries.size());

    Entry entry = new Entry();
    entry.name = name;

    e.entries.add(entry);

    pm.makePersistent(e);

    System.out.println(e.entries.size());
} catch (NumberFormatException nfe) {
    return null;
} finally {
    pm.close();
}
return e;

Я пытался сделать Entry встроенной сущностью, но не разрешено иметь коллекции встроенных объектов.

1 Ответ

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

На самом деле обновление не было проблемой. Я не загрузил событие должным образом в моем сервисе.

public Event loadEvent(String id) {
    PersistenceManager pm = PMF.get().getPersistenceManager();
    try {
        Event event = pm.getObjectById(Event.class, Long.parseLong(id));
        // And load entries
        for (Entry entry : event.getEntries()) {
            entry.amounts.size();
        }
        return event;
    } catch (NumberFormatException e) {
        return null;
    } finally {
        pm.close();
    }
}

После добавления добавления строк между комментарием и оператором возврата все записи были показаны правильно.

...