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…
NãorespondopelocritériadoHibernatemas,dentreaspossibilidadesestãoasnamedQueriesquepodemserdefinidasnasuaclassedemodelo.
Entretanto,mesmocomelasoualgumoutraidéiaqualquer,vcnãovaiescapardefazertestesnoscamposparaverificaroqueusar.Asvezesverificaçõ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();