Обновление коллекции зависимых объектов

У меня есть класс 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 встроенным объектом, но ему не разрешено иметь коллекции встроенных объектов.


person tkr    schedule 17.07.2010    source источник


Ответы (1)


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

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

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

person tkr    schedule 20.07.2010