【问题标题】:GAE, JDO, count() doesn't work?GAE、JDO、count() 不起作用?
【发布时间】:2011-01-27 03:46:53
【问题描述】:

在使用 Spring/JDO 保存 2 个实体后(在事务中)在 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()));
 }

【问题讨论】:

    标签: java spring google-app-engine jdo


    【解决方案1】:

    Google 的 JDO 实现目前不支持聚合 AFAIK。每次持久化一个新实体时,尝试通过更新一些其他实体来跟踪计数。如果您经常写入,您将需要一个“sharded”计数器。

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

    【讨论】:

      【解决方案2】:

      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 插件问题跟踪器上提出问题(链接页面上的“问题”)

      【讨论】:

      • 我不确定您在该页面上链接到什么。 fillBatchDeleteQuery 重要吗?
      • 由于他们的代码已更新并且链接被搞砸了......使用最新的代码code.google.com/p/datanucleus-appengine/source/browse/trunk/src/… - 事实仍然存在,他们支持 count(),通过对该代码的简单审查可以看出...... . 应该有人费心去做这样的事吗
      • 哈哈哈,现在链接又死了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多