Não conhecia o LIMIT
Mas quem procurar a solução com hibernate
Criteria crit = session.createCriteria(clazz);
crit.addOrder(order);
crit.setFirstResult(first);
crit.setMaxResults(maxResult);
List<?> list = crit.list();
ty all
[RESOLVIDO]
Olá…
Eu andei trabalhando em um paginador de listas para as minhas tabelas e consegui chegar nisso.
package mark.utils.list;
import java.util.List;
public class ListPaginator<T> {
private List<T> list;
protected int currentPagination, maxPage, pageResults;
protected int listSize;
protected ListPaginator(int listSize, int resultsPerPage) {
pageResults = resultsPerPage;
this.listSize = listSize;
currentPagination = 0;
if (pageResults == 0)
return;
if (listSize % pageResults == 0)
maxPage = listSize / pageResults - 1;
else
maxPage = listSize / pageResults;
}
public ListPaginator(List<T> list, int resultsPerPage) {
this.list = list;
pageResults = resultsPerPage;
currentPagination = 0;
if (pageResults == 0)
return;
if (list.size() % pageResults == 0)
maxPage = list.size() / pageResults - 1;
else
maxPage = list.size() / pageResults;
}
public List<T> nextResult() {
int toIndex = 0;
toIndex = (currentPagination + 1) * pageResults;
if (toIndex > list.size())
toIndex = list.size();
List<T> list = this.list.subList(currentPagination * pageResults,
toIndex);
currentPagination++;
return list;
}
public int getCurrentPage() {
return currentPagination;
}
public void setCurrentPage(int page) {
currentPagination = page;
}
public int getMaxPage() {
return maxPage;
}
}
O problema é… agora que os resultados no banco são mais de 1000 e crescendo ter que carregar a lista e pagina-la vai ficando mais demorado.
Então eu pensei em criar outro Paginator com meu DAO.
E criei isso:
public DaoListPaginator(DAO<T> dao, Order order, int resultsPerPage) {
super(dao.getListSize(), resultsPerPage);
this.dao = dao;
}
Agora a performance melhorou bastante nas telas de seleção.
Meu problema agora é: Quero deixar a lista ordenada por outra coluna e paginada.
Espero algo mais ou menos assim:
[id:character]
1:c
2:d
3:a
4:h
5:g
6:f
7:b
8:e
9:i
Quero com um select entre os indices 2 e 5 pegar assim:
[id:character]
3:a
7:b … 2
1:c …3
2:d …4
8:e …5
6:f
5:g
4:h
9:i
É possivel fazer isso com Hibernate? Ou então com SQL mesmo?
ty all