更新依赖对象的集合

时间:2010-07-17 08:36:08

标签: java google-app-engine jdo

我有一个类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 :(得分:0)

实际上更新不是问题。我没有在我的服务中正确加载事件。

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

添加注释和return语句之间的行后,所有条目都正确显示。