Tuesday, May 6, 2008

Validações do tipo "existe algum" no hibernate.

Mais um perrengue daqueles que enchem o saco. Passei algumas horas (na verdade, 4 horas) pra achar uma maneira boa e simples de se fazer esse tipo de validação. Eu precisava checar se determinado servidor público estava alocado em alguma escala de trabalho para fins de regra de negócio. O grafo de entidades para uma escala de trabalho era relativamente complexo, e um criteria via hibernate era relativamente trabalhoso e complexo de se fazer. Além disso, valeria a pena fazer um criteria, apenas para algo desse tipo?

if (! listaEscalaTrabalho.isEmpty()) {
throw new ApplicationException("messageKey");
}

O experiente Marco Antônio, colega de trabalho, tinha me sugerido fazer uma query direta no banco de dados. Não retornaria objeto algum, apenas a quantidade de escalas em que tal servidor estivesse alocado. Pode parecer um jeito arcaico, mas não, isso é GENIAL. Pense no seguinte: traz apenas um inteiro, não enche o cache do Hibernate com objetos sem necessidade, e além do mais, é rápida.

public boolean verificarServidorAlocado(
ServidorPublico servidorPublico) {
StringBuffer buf = new StringBuffer();
buf.append("select count(*)...");
...

Integer result = (Integer) HibernateUtil.
getSession().createSQLQuery(buf.toString()).
uniqueResult();

return (result > 0);
}

Claro que a melhor maneira para resolver este tipo de problema seria usar um HQL, mas como eu não sei usar isso ainda, nada como montar a query na mão, não é verdade?

Veja também:
HQL - The Hibernate Query Language

No comments:

Post a Comment

Regras são chatas, mas...
Todos os comentários são lidos e moderados previamente.
São publicados aqueles que respeitam as regras abaixo:

- Seu comentário precisa ter relação com o assunto do post;
- Em hipótese alguma faça propaganda de outros blogs ou sites;
- Não inclua links desnecessários no conteúdo do seu comentário;
- Se quiser deixar sua URL, comente usando a opção OpenID;
- CAIXA ALTA, miguxês ou erros de ortografia não serão tolerados;
- Ofensas pessoais, ameaças e xingamentos não são permitidos;