Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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 !!