protected Long getIdList(
@NonNull final CriteriaBuilder rootBuilder,
@NonNull final CriteriaQuery rootQuery,
@NonNull final Pageable pageable) {
final HibernateCriteriaBuilder listBuilder = (HibernateCriteriaBuilder) rootBuilder;
final JpaCriteriaQuery listQuery = listBuilder.createQuery(Long.class);
final SqmSubQuery subQuery = (SqmSubQuery) listQuery.subquery(Tuple.class);
final SqmQuerySpec rootQuerySpec = ((SqmSelectStatement) rootQuery).getQuerySpec();
final SqmQuerySpec subQuerySpec = rootQuerySpec.copy(SqmCopyContext.simpleContext());
subQuery.setQueryPart(subQuerySpec);
final Root subRoot = subQuery.getRoots().iterator().next();
subQuery.multiselect(subRoot.get("id").alias("id"));
// listQuery.multiselect(listBuilder.count(listBuilder.literal(1))).from(subQuery);
// instead of counting the ids, I want to get them...
listQuery.multiselect(subRoot.get("id")).from(subQuery);
return entityManager
.createQuery(listQuery)
.setFirstResult(PageableUtils.getOffsetAsInteger(pageable))
.setMaxResults(pageable.getPageSize())
.getResultList();
}
К сожалению, это не работает, и я всегда получаю это сообщение об ошибке:
Ниже приведен подзапрос для получения списка идентификаторов: [code]protected Long getIdList( @NonNull final CriteriaBuilder rootBuilder, @NonNull final CriteriaQuery rootQuery, @NonNull final Pageable pageable) { final HibernateCriteriaBuilder listBuilder = (HibernateCriteriaBuilder) rootBuilder; final JpaCriteriaQuery listQuery = listBuilder.createQuery(Long.class); final SqmSubQuery subQuery = (SqmSubQuery) listQuery.subquery(Tuple.class); final SqmQuerySpec rootQuerySpec = ((SqmSelectStatement) rootQuery).getQuerySpec(); final SqmQuerySpec subQuerySpec = rootQuerySpec.copy(SqmCopyContext.simpleContext()); subQuery.setQueryPart(subQuerySpec); final Root subRoot = subQuery.getRoots().iterator().next(); subQuery.multiselect(subRoot.get("id").alias("id"));
// listQuery.multiselect(listBuilder.count(listBuilder.literal(1))).from(subQuery); // instead of counting the ids, I want to get them... listQuery.multiselect(subRoot.get("id")).from(subQuery);
return entityManager .createQuery(listQuery) .setFirstResult(PageableUtils.getOffsetAsInteger(pageable)) .setMaxResults(pageable.getPageSize()) .getResultList(); } [/code] К сожалению, это не работает, и я всегда получаю это сообщение об ошибке: [code]org.springframework.orm.jpa.JpaSystemException: Could not locate TableGroup [/code] Любая подсказка будет оценена по достоинству. Спасибо.