Como vocês fazem para suprir a falta de criteria na JPA < 2?

Oi gente,

estou com um problema, tenho que elaborar uma tela de pesquisa, praticamente um relatório, onde existem 9 campos (inputs, combo, calendário etc) e todos os campos são opcionais, ou seja, posso ter 0 ou 9 parâmetros de filtro.

Como fazer de uma maneira menos suja com JPA 1 para realizar esses filtros? Atualmente eu fiz concatenando strings, comparo cada campo se foi preenchido e se tiver eu adiciono o sql complementar. Está funcionando, porém ficou muito feio, o método ficou muito grande tendo que comparar se cada campo está != null. Dei olhada nas NamedQuery, porém como os filtros podem ser dinâmicos não me serviu.

Alguém tem alguma solução pra isso?

obs. Não posso mudar pro hibernate e usar criteria e nem migrar pra JPA 2…

Grata a todos.

Olá Carol,

Bem não sei quanto aos amigos, mas qnd eu precisei de algo semelhante eu fiz o mesmo que vc. Assim:


boolean isAtributo1 = (atributo1!= null && !"".equals(atributo1));
boolean isAtributo2 = (atributo2!= null && !"".equals(atributo2));

StringBuilder query =  new StringBuilder();
query.append("select d from Table d where");

if(isAtributo1){query.append(" upper(atributo1) = :atributo1 AND");
if(isAtributo2){query.append(" upper(atributo2) = :atributo2 AND");

query = query.delete(query.length() - 4, query.length());
Query finalQuery = getEntityManager().createQuery(query.toString());

Eu acho que vc fez algo parecido, mas se te ajudar em algo, depois vc só precisa inserir os parametros.

abss