Arquivo

Posts Tagged ‘consulta’

Usando ResultTransformer personalizado na sua consulta com Hibernate

No post “Como retornar e preencher apenas alguns atributos da entidade na consulta com Hibernate” mostrei como usar a classe AliasToBeanResultTransformer junto com HQL. A classe fornecida pelo próprio Hibernate é realmente muito útil, acontece que se você tem alguma consulta SQL através do método createSQLQuery (da classe org.hibernate.Session), pode ter passado pelo problema que tive essa semana. Infelizmente a classe AliasToBeanResultTransformer não funciona com SQLQuery quando, entre os atributos retornados, há  Enumerations. Outro problema é quando temos atributos de entidades relacionadas. A reflexão empregada por essa classe auxiliar não consegue instanciar e preencher as dependências entre a classe principal e seus relacionamentos.

Vamos ao exemplo abaixo:

Leia mais

Anúncios

Como retornar e preencher apenas alguns atributos da entidade na consulta com Hibernate

Esses dias desenvolvi um sistema que teria que armazenar uma entidade em escopo de sessão, porém a classe representada pela entidade tinha vários atributos de instância. Isso despertou uma certa preocupação em relação ao consumo de memória, visto que haveriam muitos acessos simultâneos ao sistema e quase todos os usuários teriam esse objeto setado na sessão. O detalhe é que em termos de escopo de sessão eu precisava de apenas alguns atributos, enquanto vários outros eu precisava em apenas algumas telas – poderia ser escopo de requisição.

A solução foi puxar somente alguns dos atributos na consulta que retornava o objeto a ser colocado na sessão. Quando eu precisasse dos outros atributos da entidade, teria uma variável do mesmo tipo em um managed bean com escopo de request que seria utilizado nas telas.

Pensei então: para fazer isso com JDBC é muito fácil, mas minha aplicação usa Hibernate. É possível fazer isso com Hibernate? Como?

Após algumas horas de pesquisa descobri a classe AliasToBeanResultTransformer que simplifica bastante as coisas para a gente. Vamos aos códigos:

Leia mais

Como passar a consulta dinamicamente para o JasperReports / iReport

Essa semana me deparei com um problema no trabalho que levei alguns minutos estudando a melhor solução. Eu tinha um relatório que deveria ser gerado com o JarperReports cuja consulta a ser realizada no banco poderia mudar constantemente, de acordo com o filtro que o usuário selecionasse na tela. Uma solução me veio à cabeça imediatamente: mandar um ArrayList para o JasperReports com o resultado da minha consulta para que ele preencha os dados. Essa solução é prática e fácil de implementar, mas esse ArrayList poderia ficar muito grande, visto que meu banco possuía muitas informações.

A melhor solução que encontrei foi passar a consulta inteira como parâmetro para o JasperReports fazer a consulta no banco. Para ilustrar como fazer isso, vamos aos passos abaixo:

Leia mais