Ааааа ... Мне нужно разобраться в проблеме после 5 минут публикации вопроса ..
Проблема заключалась в том, что я импортировал неправильный таймер, который был недостаточно неправильным, чтобы вызвать явные проблемы с выполнением кода (возможно, урок для следующего человека).
Проблема была импортирована благодаря моей IDE
import { timer } from "rxjs/internal/observable/timer";
, но правильный импорт -
import { timer } from 'rxjs';
, и теперь мой код работает, как и ожидалось, по волшебству
Запрос типа MyEntity
вернет MyEntity
. Вам нужен запрос для Long
.
CriteriaBuilder qb = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> cq = qb.createQuery(Long.class);
cq.select(qb.count(cq.from(MyEntity.class)));
cq.where(/*your stuff*/);
return entityManager.createQuery(cq).getSingleResult();
Очевидно, вы захотите построить свое выражение с любыми ограничениями, группировками и т.д., которые вы пропустили в примере.
С Spring Data Jpa мы можем использовать этот метод:
/*
* (non-Javadoc)
* @see org.springframework.data.jpa.repository.JpaSpecificationExecutor#count(org.springframework.data.jpa.domain.Specification)
*/
@Override
public long count(@Nullable Specification<T> spec) {
return executeCountQuery(getCountQuery(spec, getDomainClass()));
}
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
cq.select(cb.count(cq.from(MyEntity.class)));
return em.createQuery(cq).getSingleResult();