Posicao do Registro com hibernate

8 respostas
C

e ai galera, blz
Sequinte alguem sabe como retornar a posicao do registro na tabela??
exemplo:
tenho uma tabela Cliente assim
id, razao social
1 , jose da silva
2, mario legal
9, toninho
11, arlinho

Quero sabe ser tem como eu fazer uma query assim

Query query = getSessao().createQuery("from Cliente where id = 9")
Cliente cli = (Cliente) query.uniqueResult();

e em algum lugar desse pra saber que este registro esta na posicao 3 ta tabela

alguem tem uma idade??

8 Respostas

L

Estou com este mesmo problema…alguém já fez isso?

Polverini

seria mais ou menos assim:

String query = "COMANDO";
this.session.createQuery(query).uniqueResult();

???

edit

L

Meu problema seria o que iria no lugar de “COMANDO”

Polverini

Para a classe

@Entity
@Table(name = "CD_CLIENTE")
public class Cliente implements Serializable {

    private long idCliente;

    @Id
    @Column(name = "ID_CLIENTE")
    public long getIdCliente() {
        return idCliente;
    }

    public void setIdCliente(long idCliente) {
        this.idCliente = idCliente;
    }
}

Ficaria assim

String query = "From Cliente where idCliente = 9";  this.session.createQuery(query).uniqueResult();

Repare que o campo do idCliente usado na query é identico a variavel criada na classe de modelo, funcionou ?

L

Na verdade eu precisaria da posição da linha que vem na listagem da pesquisa, e não do id, o dito “row_number”, pois estou implementando paginação em minha tabela,
então quando cadastro por exemplo um novo produto, ele iria refazer a tabela e eu gostaria de pegar a posição que estaria este produto para selecionar a página e já sair mostrando ele…pois fiz uma paginação de 2000 registros. Pois tenho uma tabela que vai ter uns 10.000 produtos…sendo então que terei 5 paginas na tabela. Para melhorar o desempenho, fiz a consulta buscando somente os produtos da página selecionada. O problema é que quando cadastro um produto, de nome “Melancia” por exemplo… ele vai cair lá na página 3, então eu tenho que descobrir no salvar o produto em que posição na listagem ele está para que eu possa já selecionar a página correta, e não sempre a primeira página… Mas não quero ter que fazer uma pesquisa completa, pois daí cada vez que eu salvaria um novo produto ou editasse um, teria que buscar os 10.000 para ver em que posição estaria…e desse jeito ficaria lerdo…creio que tenha algum tipo de select que faça isso como um Select count(cdProduto) por exemplo que me retorna um total de registros…

jokacwb

Cara ,

Não sei se entendi bem a sua dúvida, mas de qualquer forma vmus lá:

vc pode sim identificar a posição de um registro dentro de uma outra lista veja o código que montei:

//Este trecho simula a lista completa que vc obteve do hibernate
		List<Cliente> li = new ArrayList<Cliente>();
		li.add(new Cliente(1,"jose da silva"));
		li.add(new Cliente(2,"mario legal"));
		li.add(new Cliente(9,"toninho"));
		li.add(new Cliente(11,"arlinho"));

		//Simula o registro isolado obtido pelo (Cliente cli = (Cliente) query.uniqueResult())
		Cliente c = new Cliente(9,"toninho");
		
		//Localiza o registro na lista
		int posicaoNaLista = li.indexOf(c)+1;
		
		System.out.println("Cliente "+c.getRazaoSocial()+" com id "+c.getIdCliente()+"  está na posição "+posicaoNaLista+" da lista");

Observação: não esqueça de implementar os métodos equals e hashCode na sua classe Cliente, para garantir q o registro
isolado é idêntico ao da lista.

é isso, espero que ajude,

L

Em um List ou ArrayList, ou vector…tudo bem até que dá…
O que me refiro é conseguir essa informação via sql… pois vou fazer consultas com grandes números de registros… tipo…20.000
e presciso saber a posição de determinado registro dentro desses 20.000 pra mim trazer somente a página que ele está e não os 20.000… senão perde muuuito o desempenho fora que uma hora vai dar estouro de memória se sempre trouxer todos os registros…

jokacwb

Se o seu banco for MS SQL server segue alguns links q pode te ajudar

http://www.linhadecodigo.com.br/dica/1269/Pagina%C3%A7%C3%A3o-de-dados-com-SQL.aspx
http://www.htmlstaff.org/ver.php?id=22928

Criado 8 de outubro de 2010
Ultima resposta 11 de mai. de 2011
Respostas 8
Participantes 4