В моем коде мне нужно монтировать выбор динамически в соответствии с параметризацией моей системы. Для этого я настраиваю следующую структуру:
StringBuilder sql = new StringBuilder();
final String numeroCadastro = "numeroCadastro";
sql.append("select colaborador.id.numeroEmpresa, colaborador.id.tipoColaborador, colaborador.id.numeroCadastro as ").append(numeroCadastro).append(", colaborador.nome as nome, ");
boolean sinalPositivo = false;
String alias = "horasPagar";
getSelectSumHorasCompensacao(sql, sinalPositivo, alias);
sql.append(",");
sinalPositivo = true;
alias = "horasReceber";
getSelectSumHorasCompensacao(sql, sinalPositivo, alias);
sql.append(" from Colaborador colaborador, Situacao situacao ");
sql.append(" where ");...
Чтобы смонтировать фрагмент заказа, я добавляю «Order by» прямо в строку запроса и устанавливаю свои ограничители следующим образом:
if (StringUtils.isNotBlank(orderByField)) {
return " order by " + orderByField.replace("x.", aliasName);
} else if (StringUtils.isNotBlank(defaultSort)) {
return " order by " + aliasName + defaultSort;
}
.
.
.
EntityManager persistenceContext = getPersistenceContext();
TypedQuery<T> jpaQuery = persistenceContext.createQuery(sbSql.toString(), T);
if (start != null && limit != null) {
jpaQuery.setFirstResult(start);
jpaQuery.setMaxResults(limit);
}
List<Object[]> resultList = jpaQuery.getResultList();
Однако при этом настраивается команда выбора, которая не разбивает на страницы должным образом, учитывая номер строки моего основного выбора, не считая, что она выгружается. Ниже команда, сгенерированная с частями, которые JPA вставляет, чтобы сделать нумерацию страниц:
выберите сгенерированный
Вот результат моего выбора, уже заказанного, без подкачки, генерируемой JPA
Основной выбор
Здесь результат, полученный с нумерацией страниц. Обратите внимание, что из-за нумерации страниц первые 10 записей не совпадают. Из того, что я понимаю, это происходит потому, что он основан на ROWNUM моего основного запроса и приносит только строки меньше 10.
Результат с нумерацией страниц
У меня вопрос, как JPA-страница правильно отображает результат, учитывая порядок выбора?