2011-02-28 3 views
1

Google App Engine 프로젝트에서 작업 중이며 JDO에서 관계가 제대로 작동하기 위해 애 쓰고 있습니다. 개체가 올바르게 저장되지만 관련 개체가 데이터 저장소 뷰어 또는 쿼리에 표시되지 않습니다.Google App Engine에서 소유 관계가 작동하지 않습니다.

A는 내 코드의 예를 손질 :


     @PersistenceCapable 
     public class Project implements Persistable { 


    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Key id; 

    @Persistent(defaultFetchGroup = "true") 
    private Client client; 

     // Extra fields and getter and setters remove 

     } 

     @PersistenceCapable 
     public class Client implements Persistable { 

    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Key id; 

Representation r = null; 
     PersistenceManager pm = PMF.get().getPersistenceManager(); 

     try { 
      XMLToObject p = new XMLToObject(new org.everglade.tempus.persistence.dataobjects.Project()); 
      p.parse(xml); 
      org.everglade.tempus.persistence.dataobjects.Project proj = (org.everglade.tempus.persistence.dataobjects.Project) p.getObject(); 
      pm.makePersistent(proj); 
      getResponse().setStatus(Status.SUCCESS_CREATED); 
      getResponse().setLocationRef("/project/" + KeyFactory.keyToString(proj.getId())); 
     } catch (Exception e) { // Add finer exception handling here so can alter status based on what went wrong! 
      getResponse().setStatus(Status.SERVER_ERROR_INTERNAL); 
      Log.severe("The following error occurred whilst trying to add a new project: " + e.getMessage()); 
     } finally { 
      pm.close(); 
     } 

프로젝트의 목적은 그러나 어떤 클라이언트가 연결되지 않습니다 저장 - 사람이 왜 볼 수 있습니까? 이것은 앱 엔진에서의 첫 번째 앱이자 JDO를 사용하는 앱이기 때문에 매우 분명합니다.

미리 감사드립니다.

답변

1

App Engine의 소유 관계는 JDO 사양과 매우 다릅니다. 소유 관계는 실제로 스토리지 그래프 인 엔터티 그룹을 만듭니다. 더 많은 정보는 여기 http://code.google.com/appengine/docs/java/datastore/jdo/relationships.html

그래서 대부분의 경우 앱 엔진에서 Key를 사용하여 다른 객체를 참조하는 것이 좋습니다. 엔티티 그룹 그래프를 정의하려고하지 않는 한. 같은 메모에서 큰 상속 트리 (위의 동일한 참조 링크에있는 정보)를 피하도록 조언합니다.