Solucionado (ver solução)
Solucionado
(ver solução)
19
respostas

Como limitar resultado da consulta do TypedQuery com cache

Boa tarde pessoal!

Como eu posso limitar o resultado trazido pela TypedQuery ?

Eu tentei fazer:

    public List<Cidade> lista() {
        TypedQuery<Cidade> query = manager.createQuery("Select c from Cidade c", Cidade.class).setMaxResults(100);
        return query.getResultList();
    }

Mas assim eu estou limitando os registros TRAZIDOS pela consulta...

Como eu posso trabalhar com o cache para mostrar no forEach da minha lista.jsp

19 respostas

Fala aí Ewerton, blz?

Cara não entendi direito sua dúvida, o que você quer fazer realmente é trabalhar com um limite no cache?

Ewerton você pode estar trabalhando com setFirstResult e setMaxResults para trabalhar com limites de query.

// buscar os 100 primeiros registros
this.em.createQuery(sql).setFirstResult(0).setMaxResults(100).getResultList();

// buscar os proximos 100
this.em.createQuery(sql).setFirstResult(100).setMaxResults(200).getResultList();

Mas caso queira limite no forEach, pode trabalhar com o begin e end:

<c:forEach items="${list}" begin="0" end="100">
    // ...
</c:forEach>

Abraçooos

Mas ai a query só vai me retornar os primeitos 100 registros... Ou do 101º ao 200º... No caso eu gostaria de saber, se tem como eu "controlar" o retorno do JPA com o cache... Ou se no caso eu tenho que implementar o labdatatables...

não entendi

A TypedQuery é a do ClienteDao, do projeto que eu subi a pouco no drive... Essa tabela de clientes possui 130 campos e quase 32mil registros... Eu não consigo carregá-la no lista.jsp

Estoura o cache do browser...

Para resolver você precisa tem duas maneiras:

1) Utilizar paginação da forma que havia lhe explicado na outra duvida, traga de 100 em 100 os registros por páginas

2) Sempre traga 100 registros ao abrir a tela, se um registro não estiver na página coloque uma busca onde o usuário pode informar o nome do cliente por exemplo ou o começo do nome, ao executar a busca traga novamente no máximo 100 registros de acordo com o nome digitado.

No meu trabalho utilizamos a segunda maneira, por padrão trazemos os 100 primeiros registros e se necessário o cliente faz a busca de um registro especifico.

Mas Matheus... São 13.000 registros...

Ai eu faço:

// buscar os 100 primeiros registros
this.em.createQuery(sql).setFirstResult(0).setMaxResults(100).getResultList();

// buscar os proximos 100
this.em.createQuery(sql).setFirstResult(100).setMaxResults(200).getResultList();

...

// buscar os proximos 100
this.em.createQuery(sql).setFirstResult(12900).setMaxResults(13000).getResultList();

No meu método lista do ClienteDAO...

Isso ??

solução!

SEM SOLUÇÃO !!!

Ewerton, no meu blog eu tenho paginação, quer que eu lhe envie a forma como fiz ?

Eu gostaria sim, Matheus...

Muito obrigado!!!

Ewerton, estava tentando simplificar o código para você mas esta complicado, tenta me mandar o projeto que eu implemento para você da forma que fizemos com o JS.

Blz Matheus...

Segue link => https://drive.google.com/drive/folders/0B1n2t9Tjxu9GckdsZEowUGRxT2s?usp=sharing

Obrigado!! Um abraço!

Boa tarde Matheus !!

Tudo na paz ?

Conseguiu baixar e executar o projeto... Quer que eu abra outro post ?

Obrigado!! Abraço!

Ewerton, estou enrolado com uns projetos e b.o's ainda não consegui ver, prometo que amanhã eu dou uma olhada, se quiser atualiza o projeto e manda de novo.

Tranquilo Matheus...

Vc já preencheu um input com base um um select ?

Muito obrigado pela ajuda!!!

Boa tade Matheus!! Tudo na paz ?

Estão me cobrando a correção dessa tabela...

Se vc puder dar uma olhada pra mim, eu agradeço muito !!

Um abraço!

Atualizei o fonte no drive => https://drive.google.com/drive/folders/0B1n2t9Tjxu9GckdsZEowUGRxT2s?usp=sharing

Ewerton as coisas estão bem corridas por aqui, ainda não consegui tirar um tempo para ver a questão da paginação para você.

Fala Matheus blz...

Sem problema, eu estou trabalhando em um outro projeto... Acredito que na segunda eu volte pra esse projeto anterior... Andei lendo a documentação do VRaptor, e ele possui essa parte de paginação... Vou tentar implementar, surgindo alguma dúvida abro um post e te mando o link pode ser...

Abraço!! T+ bom fim de semana !!