Paginação no hibernate  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
jprogrammer
Virtual Machine Man
[Avatar]
Membro desde: 04/02/2005 13:49:20
Mensagens: 546
Offline

Como faço paginação no hibernate.
Precisa me retornar o número total de registros.
Outra coisa: Descobri que não dá para ordenar por composite-elements.
ex:


Não posso ordenar em tempo de execução por qtd ou por descricao.

O bom menino !!!
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

Ordene o Set, ue
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
Filipe Sabella
GUJ Expert

Membro desde: 12/03/2003 11:25:57
Mensagens: 4680
Offline

setFirstResult
setMaxResults

Former LIPE.
[ICQ]
jprogrammer
Virtual Machine Man
[Avatar]
Membro desde: 04/02/2005 13:49:20
Mensagens: 546
Offline

Referente a ordenacao pode ser uma solução ordenar o Set na memória.
Se tiver exemplos...

O bom menino !!!
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

jprogrammer wrote:Referente a ordenacao pode ser uma solução ordenar o Set na memória.
Se tiver exemplos...


Faça os seus objetos implementarem a interface Comparable e em vez de colocar uma HashSet, coloque uma TreeSet como sendo a classe concreta da coleção.

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
jprogrammer
Virtual Machine Man
[Avatar]
Membro desde: 04/02/2005 13:49:20
Mensagens: 546
Offline

Posso fazer isso ?

This message was edited 1 time. Last update was at 01/06/2005 17:47:49


O bom menino !!!
Gerson
JavaChild
[Avatar]

Membro desde: 26/01/2003 19:48:37
Mensagens: 113
Localização: São Paulo
Offline

Se estiver utilizando Hibernate 3 e Criteria API, você pode utilizar Projection (Projections.rowCount()) para obter o total de registro sem considerar a paginação (isto é, antes de setar setFirstResult e setMaxResults).

Se estiver utilizando Hibernate 2 e Criteria API, e não puder migrar para Hibernate 3!, tem um work-around q permite usar Criteria.count(). É só baixar uma versão "Patcheada" do hibernate aqui: http://opensource.atlassian.com/projects/hibernate/browse/HB-474
Mas lembrando que esssa versão não é oficial...

Espero ter ajudado!

---

Gerson K. Motoyama
(SCJA, SCJP, SCWCD, SCBCD, SCEA-I)
[MSN]
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

jprogrammer wrote:Posso fazer isso ?


Eu faço assim:



Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
jprogrammer
Virtual Machine Man
[Avatar]
Membro desde: 04/02/2005 13:49:20
Mensagens: 546
Offline

Não dá "xábu" com o lazy-loading.
Maurício Linhares wrote:
Eu faço assim:



Assim eu tô instanciado o objeto desnecessariamente.

O bom menino !!!
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

Ah velho, então transforme sua coleção num array e dê um sort(), não tem mágica não

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

Nao precisa transformar em array - basta "abracar" o Set que vem do Hibernate (que eh de um tipo proprio do Hibernate, por causa do lazy loading) em um TreeSet ou qualquer outra implementacao de SortedSet, assim oh:



Ou, se os elementos implementam Comparable, o que eh altamente recomendado nesse caso:



E, claro:

http://java.sun.com/j2se/1.4.2/docs/api/java/util/TreeSet.html#TreeSet(java.util.Collection)
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
viktorfss
What is classpath?

Membro desde: 22/02/2007 09:31:52
Mensagens: 8
Offline

Pessoal, estou também com problemas para paginar uma consulta, mas no meu caso é devido a quantidade de registros que preciso retornar. No meu caso, não tenho condições de trazer todos os registros que preciso em tempo hábil e por isso preciso buscar em partes.
O problema é que já usei tags para paginar e também "setFirstResult" e "setMaxResults" mas a impressão que tive comparando o tempo das buscas (com 5, 100 e 1000 registros, sempre foi o mesmo tempo) é que o hibernate sempre trazia todos os itens e depois filtrava o que eu havia passado como parâmetro, o q não resolve o problema...
Já tentei usar lazy="true" para não precisar carregar toda a árvore de dados, mas preciso das informações dos nós filhos também...
Alguém teria alguma solução para paginação com uma quantidade grande de registros que não seja usar diretamente o sql ? Pode ser algum esquema de offset no hql, que ainda não encontrei...
Qualquer dica será muito bem-vinda ! Obrigado
fabioissamu
JavaChild

Membro desde: 21/02/2007 16:48:46
Mensagens: 145
Localização: Rio de Janeiro
Offline

HHahahahahahA

Como eu fiquei de saco cheio de procurar coisas simples resolvi fazer hard code, só tem um problema,
como eu imprimo os links (código html) no struts 2?

método da classe de action

Minha classe de paginação


Tentativa de imprimir os links no struts 2

Ele imprime o código fonte > , etc. LOL
mas cheguei perto heheheeh

This message was edited 2 times. Last update was at 16/12/2007 01:59:38


se tanto faz, então escolha o melhor.
http://www.goals.com.br
fabioissamu
JavaChild

Membro desde: 21/02/2007 16:48:46
Mensagens: 145
Localização: Rio de Janeiro
Offline

A solução para o meu caso é criar um POJO de link

e no JSP um iterator sobre os links


trocamos o método makelinks e getLinks para retornar List<Links>


E pronto a paginação simples funciona.

mas enfim, o melhor é o display tag pelo que eu tenho pesquisado...

This message was edited 3 times. Last update was at 20/12/2007 17:51:13


se tanto faz, então escolha o melhor.
http://www.goals.com.br
renatocustodio
JavaGuru
[Avatar]

Membro desde: 04/03/2008 07:21:24
Mensagens: 249
Offline

Eu estava analisando o sql gerado pelo hibernate/JPA no sql server usando setFirst e setMaxResults. Ele aparentemente trás todos até aquela quantidade e depois descarta os primeiros em memória não é isso?

Por exemplo se eu colocar um:


Na lista que eu vou receber vai estar apenas os 10 que começam a partir do 100, mas o sql irá buscar 110, correto? Isso me preocupou um pouco pois estou utilizando em projeto para fazer a paginação e que poderá ter milhares de itens conforme os critérios de pesquisa, e uma paginação pequena para melhorar o desempenho, mas se for isso mesmo o desempenho do ponto de vista do select no banco será a mesma coisa....

Existe alguma outra forma? tipo, parecido com o limit no MySQL
[WWW]
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team