GAE, JDO, count () не работает? - PullRequest
0 голосов
/ 13 марта 2010

В GAE с Spring / JDO после сохранения 2 сущностей (в транзакции).
При вызове 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 голосов
/ 14 марта 2010

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 («Проблемы» на связанной странице)

0 голосов
/ 13 марта 2010

Реализация Google JDO в настоящее время не поддерживает агрегаты AFAIK. Попробуйте отслеживать количество, обновляя какую-либо другую сущность каждый раз, когда вы сохраняете новую сущность. Если вы делаете частые записи, вам понадобится счетчик " sharded ".

Ваш вопрос очень близок к этому, , поэтому чтение этих ответов может помочь.

...