在保存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()));
}
答案 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插件提出问题(链接页面上的“问题”)