Hibernate, pequena ajuda

5 respostas
H

Olá Pessoal…

Eu tenho um formulário no meu sistema com 3 campos: Nome, Cidade e Identidade, opções de preenchimento para uma busca…
Desejo fazer um select com eles sendo que existem 6 possibilidades de query, jah que eles podem ser nulos( não todos, obviamente)… O usuário pode preencher soh o nome ou só nome e cidade, por exemplo…

Gostaria de saber, como, talvez utilizando criteria(não sei) eu posso resolver esse problema sem ter que escrever todas essas queries no braço…

Desde jah, agradeço a atenção de vcs!

Abraços!

5 Respostas

Anderson_Schmidt

Olá,

Não respondo pelo critéria do Hibernate mas, dentre as possibilidades estão as namedQueries que podem ser definidas na sua classe de modelo.

Entretanto, mesmo com elas ou algum outra idéia qualquer, vc não vai escapar de fazer testes nos campos para verificar o que usar. As vezes verificações (if's) + chamadas de método podem ficar mais extensas do que a montagem desses selects dinamicamente, por exemplo.

[ edit: Pra montar uma estrutura que faça isso de forma transparente precisa compensar o investimento =D ]
Flws!
Schmidt

vitorh.campos

Não sei se funciona no Hibernate, mas usando SQL nativo (pelo menos no Oracle funciona) você poderia fazer algo assim:

SELECT * FROM TABELA WHERE (:NOME IS NULL OR NOME = :NOME) AND (:CIDADE IS NULL OR CIDADE = :CIDADE) AND (:IDENTIDADE IS NULL OR IDENTIDADE = :IDENTIDADE)

Acredito que pelo menos no PostgreSQL isso também funcione (no máximo com uma ou outra adaptação, já que no Oracle uma string vazia é igual a NULL, e em outros bancos não).

Abdon

Sim use criteria para não ficar concatenando sql

Criteria crit = session.createCriteria(SuaClasse.class);
crit.add( Expression.eq( "rg", seuObjecto.getRg()));
List a = crit.list();
passos

Example queries tambem pode ser uma otima opção.

G

faz assim:

session.createCriteria(Pessoa.class)
    .add(Restrictions.like("nome", "%" + pessoa.getNome()+"%"))
    .add(Restrictions.like("cidade", "%" + pessoa.getCidade()+"%"))
    .add(Restrictions.like("identificacao", "%" + pessoa.getIdentificacao()+"%")).list();

[]'s
Geraldo Barboza

Criado 9 de abril de 2007
Ultima resposta 11 de abr. de 2007
Respostas 5
Participantes 6