2010-03-13 52 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