2010-03-13 4 views
0

트랜잭션에서 2 개의 엔티티를 저장 한 후 Spring/JDO에서 GAE를 사용합니다.
getById을 호출 할 때 - 데이터 저장소에서 개체를 가져옵니다.
getCount()은 "0"
을 반환하고 getAll()을 호출하면 빈 콜렉션을 반환합니다.

GAE, JDO, count()가 작동하지 않습니까?

@Override 
public Long getCount() { 
    return ((Integer) getJdoTemplate().execute(new JdoCallback() { 
    @Override 
    public Object doInJdo(PersistenceManager pm) throws JDOException { 
    Query q = pm.newQuery(getPersistentClass()); 
    q.setResult("count(this)"); 
    return q.execute(); 
    } 
    })).longValue(); 
} 

@Override 
public void saveOrUpdate(T entity) { 
    getJdoTemplate().makePersistent(entity); 
} 

@Override 
public List<T> getAll() { 
    return new ArrayList<T>(getJdoTemplate().find(getPersistentClass())); 
} 

답변

0

는 JDO 구글의 구현은 현재 AFAIK 집계를 지원하지 않습니다. 새로운 엔티티를 지속 할 때마다 다른 엔티티를 업데이트하여 수를 추적하십시오. 자주 쓰는 경우 "sharded"카운터가 필요합니다.

귀하의 질문이 this one,에 매우 가깝기 때문에이 답변을 읽는 것이 도움이 될 수 있습니다.

0

수()는 다음 Google에 테스트 케이스를 제공하고 그들의 이슈 트래커에 문제를 제기하는 것이 좋습니다 당신은 문제가 있다면 여기 http://code.google.com/p/datanucleus-appengine/source/browse/trunk/src/org/datanucleus/store/appengine/query/DatastoreQuery.java#341

을 볼 때 실제로, GAE/J의 플러그인으로 구현된다 그들의 GAE/J DN 플러그인 (링크 된 페이지의 "Issues")

+0

나는 그 페이지에서 당신이 무엇을 링크하는지 확신 할 수 없다. fulfillBatchDeleteQuery가 중요합니까? –

+0

코드가 업데이트되어 링크가 망가 졌기 때문에 최신 코드 사용 http://code.google.com/p/datanucleus-appengine/source/browse/trunk/src/org/datanucleus/store/appengine/query /DatastoreQuery.java#361 - 그 코드의 간단한 검토로 볼 수 있듯이 사실은 count()를 지원합니다 ... 누군가가 그런 일을해야한다면 – DataNucleus

+0

하하하, 이제 링크가 다시 죽었습니다. – fabspro