GAE,JDO,count()不起作用?

时间:2010-03-13 12:45:51

标签: java spring google-app-engine jdo

在保存2个实体后(在交易中)使用Spring / JDO进行GAE 在调用getById时 - 从数据存储中获取的实体 在呼叫getCount()时返回“0”
- 在调用getAll()时 - 返回空集合。

 @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()));
 }

2 个答案:

答案 0 :(得分:0)

Google的JDO实施目前不支持聚合AFAIK。每次持久保存新实体时,请尝试通过更新其他实体来跟踪计数。如果你经常写,你会想要一个“sharded”计数器。

您的问题非常接近this one,,因此阅读这些答案可能有所帮助。

答案 1 :(得分:0)

count()实际上是在GAE / J的插件中实现的,如此处所示 http://code.google.com/p/datanucleus-appengine/source/browse/trunk/src/org/datanucleus/store/appengine/query/DatastoreQuery.java#341

如果您遇到问题,请建议您向Google提供测试用例,并在其问题跟踪器上针对其GAE / J DN插件提出问题(链接页面上的“问题”)