2010-03-13 48 views
0

保存2個實體(在事務中)後,在GAE上使用Spring/JDO。
調用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

計數()實際上是在GAE/J的插件來實現,因爲在這裏看到 http://code.google.com/p/datanucleus-appengine/source/browse/trunk/src/org/datanucleus/store/appengine/query/DatastoreQuery.java#341

如果你有一個問題,它那麼建議你提供一個測試用例谷歌和他們的問題跟蹤器引發的問題他們的GAE/J DN插件(鏈接頁面上的「問題」)

+0

我不確定您在該頁面上鍊接的內容。 fulfillBatchDeleteQuery重要嗎? – 2011-01-05 19:52:06

+0

由於他們的代碼已更新,並且會將鏈接擰緊......使用最新的代碼http://code.google.com/p/datanucleus-appengine/source/browse/trunk/src/org/datanucleus/store/appengine/query /DatastoreQuery.java#361 - 事實依然存在,它們支持count(),正如可以通過對代碼的簡單回顧可以看出的那樣...任何人都應該打擾做這樣的事情 – DataNucleus 2011-01-05 21:05:03

+0

哈哈哈,現在鏈接又一次死了。 – fabspro 2013-05-09 16:19:13