2011-03-29 8 views
3

그래서이 문제는 약 3 주 동안 지속되었습니다. 내가 이것을 읽었습니다 : http://code.google.com/appengine/docs/java/datastore/jdo/relationships.html 그리고 그것은 밖으로 작동하지 않는 것. 기본적으로 나는 풀 (pool)이라는 영구 객체를 가지고 있으며,이 풀에 플레이어를 추가해야합니다. 플레이어는 또한 영구 객체입니다. 나는 풀과 플레이어 사이에 무적의 관계가 있습니다. 풀에 플레이어 ID 세트가 있습니다 (기본 키 ids ...)google-appengine의 컬렉션에 추가

그래서 내가 시도한 것들 : 1) 기본 키로 Long을 사용했습니다. 둘 다, 이것은 작동하지 않았다. 2) appengine의 Key를 기본 키로 사용하려고했으나 클라이언트 측에서 Key 구현을 사용할 수 없기 때문에이 방법이 작동하지 않았습니다. 내가 발견 한 해결 방법 중 어느 것도 작동하지 않으며 데이터 전송 객체는 지저분하고 지저분하고 오류가 발생하기 쉽고 모든 종류의 문제가 있습니다.

@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true") 
private String id; 

이 같은 ID와 같은 문자열을 사용하여 시도 3) ... 그 중 하나가 작동하지 않았다. 문자열을 세트에 추가하려고하면 ...

public void addPlayers(Pool pool, List<String> players) { 
    PersistenceManager pm = getPersistenceManagerFactory().getPersistenceManager(); 

    try { 
     pm.currentTransaction().begin(); 
     Pool oldPool = pm.getObjectById(Pool.class, pool.getID()); 
     for(String id : players) { 
      oldPool.addPlayer(id); 
      System.out.println("Added id:" + id); 
     } 
     pm.currentTransaction().commit(); 
    } catch (Exception e) { 
     pm.currentTransaction().rollback(); 
     e.printStackTrace(); 
    } finally { 
     pm.close(); 
    } 

} 

자동으로 실패합니다. 마찬가지로 ... 그것은 단지 그들을 유지하지 않습니다.

어떤 제안이 좋을 것입니다. 이것은 학교 프로젝트를위한 것이므로 불행히도 나는 JDO를 사용하여 GWT에서 그것을해야만한다. 내 교수와 조교는 GWT에 익숙하지 않기 때문에 나를 도울 수 없습니다 ... 재미 있습니다 ... 그래서 이것이 내 마지막 수단입니다. :)

고마워요!

+0

코드가 GWT와 어떤 관련이 있습니까? –

+0

Google 응용 프로그램 엔진을 사용하여 작성 되었기 때문에 ... 아마도 누락 된 것이 있습니까? 그것은 일식에있는 GWT 프로젝트입니다 ... – Chris

+0

로그에서 디버그 레벨로 보겠습니다. – DataNucleus

답변

1

관계를 엔터티의 '한쪽'에있는 목록으로 나타내는 유효한 이유가 있지만 더 일반적인 방법은 '많은' 한쪽. 즉, 플레이어 목록이있는 각 풀 대신 각 플레이어가 속한 단일 풀에 대한 참조가 있어야합니다.

이 접근법을 사용하지 않는 이유가 있습니까? 너 해봤 어?

관련 문제