[HIBERNATE] Método genérico para pesquisa em sistema web

Conheci a classe Example da API Criteria do Hibernate, muito interessante. O problema é que o Hibernate não adicionava na consulta as classe mapeadas, ele verificava se o atributo em questão era de um “AssociationType”. Isso deixa a pesquisa muito limitada.

Utilizando a API Reflect do Java, consegui torná-lo mais genérico, criando um método recursivo que adiciona novas instâncias de Criteria na instância original com o método Criteria.createCriteria(String associationPath).

Com isso eu consegui um método que resolve boa parte dos meus problemas, mas tem uma parte que permaneceu intocada. Em algumas páginas de pesquisa do sistema, além dos campos de pesquisa, temos como opcional a utilização de filtros. Para ficar mais fácil visualizar, tenho uma tela que lista ordens de serviço. Algumas opções de filtro:

  • com toda a matéria-prima recebida
  • com matéria-prima pendente
  • com faturamento pendente

Fica muito complicado expressar o que quero em uma consulta desse tipo apenas com o preenchimento de uma instância da classe Os (que representa a ordem de serviço). Para isso seria mais fácil escrever consultas em HQL.

Para pesquisar em cima dos campos de pesquisa o Example da API Criteria tem minha preferência, para filtros, prefiro o HQL. Alguém vê uma forma de conseguir utilizar o melhor dos dois mundos gerando uma única consulta ao banco? Caso eu não tenha explicado algo direito podem perguntar, explico o que for necessário, estou muito empolgado com essa idéia de pesquisa genérica (coisa que o Hibernate não provê) e recebi um balde de aguá fria com esse problema de adicionar os filtros.

grande abraço para vocês! :slight_smile:

Já descobri uma maneira, complementando o objeto Criteria preenchido com o Example com uma List a parte, representando os filtros. Dessa forma, eu preciso modificar o que eu fazia antes com HQL para fazer com Criteria, mas encontrei o erro que relatei aqui.

abraços,