/** * Executes a paginated request with 2 native queries (one to count the number of results, and one * to return the page). * * @param paginatedList Paginated list object containing parameters, and into which results are * added by side effects * @param queryParam Query parameters * @param sortCriteria Sort criteria * @return List of results */ public static <E> List<Object[]> executePaginatedQuery( PaginatedList<E> paginatedList, QueryParam queryParam, SortCriteria sortCriteria) { StringBuilder sb = new StringBuilder(queryParam.getQueryString()); sb.append(" order by c"); sb.append(sortCriteria.getColumn()); sb.append(sortCriteria.isAsc() ? " asc" : " desc"); QueryParam sortedQueryParam = new QueryParam(sb.toString(), queryParam.getParameterMap()); executeCountQuery(paginatedList, sortedQueryParam); return executeResultQuery(paginatedList, sortedQueryParam); }
@Override public <T extends Query> String visit(BaseQueryBuilder<T> baseQueryBuilder) { StringBuilder sb = new StringBuilder(); if (baseQueryBuilder.getProjection() != null && baseQueryBuilder.getProjection().length != 0) { sb.append("SELECT "); boolean isFirst = true; for (String projection : baseQueryBuilder.getProjection()) { if (isFirst) { isFirst = false; } else { sb.append(", "); } sb.append(alias).append('.').append(projection); } sb.append(' '); } sb.append("FROM ") .append(renderEntityName(baseQueryBuilder.getRootTypeName())) .append(' ') .append(alias); if (baseQueryBuilder.getFilterCondition() != null) { BaseCondition baseCondition = baseQueryBuilder.getFilterCondition().getRoot(); String whereCondition = baseCondition.accept(this); if (!whereCondition.isEmpty()) { sb.append(" WHERE ").append(whereCondition); } } if (baseQueryBuilder.getSortCriteria() != null && !baseQueryBuilder.getSortCriteria().isEmpty()) { sb.append(" ORDER BY "); boolean isFirst = true; for (SortCriteria sortCriteria : baseQueryBuilder.getSortCriteria()) { if (isFirst) { isFirst = false; } else { sb.append(", "); } sb.append(alias) .append('.') .append(sortCriteria.getAttributePath()) .append(' ') .append(sortCriteria.getSortOrder().name()); } } return sb.toString(); }