2010-07-17 5 views
0

클래스 이벤트와 종속 클래스 항목이 있는데, 인스턴스는 이벤트 컨텍스트에서만 유효합니다.종속 오브젝트의 콜렉션 업데이트

JDO에서 이것을 모델링하는 가장 좋은 방법은 무엇입니까? Acutally 이벤트 및 항목에 대해서만 항목을 쿼리하고 싶지 않습니다. 그래서 엔트리에 열쇠가 필요합니까?

@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; 
} 

나는 기존의 이벤트에 항목을 추가하려고하지만, acutally 변경된 이벤트를 지속하지 않습니다 :

나의 현재 솔루션입니다

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; 

내가 항목을 만들려고 임베디드 엔티티이지만 임베디드 오브젝트의 콜렉션을 가질 수는 없습니다.

답변

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 문 사이에 줄을 추가하면 모든 항목이 올바르게 표시됩니다.