【发布时间】:2018-11-09 12:17:09
【问题描述】:
在我的代码中,我需要根据系统的参数化动态挂载选择。为此,我设置了以下结构:
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 ");...
为了挂载排序 sn-p,我将“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 如何根据我的选择顺序正确分页结果?
【问题讨论】:
标签: sorting jpa pagination