Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login

Guia de Referência Hibernate

Neste Guia de Referência você encontrará cursos, devcasts e artigos que demonstram todos os recursos do Hibernate. Entre eles, é claro, como persistir dados em Java com o framework ORM mais utilizado pelos desenvolvedores.

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (15)  (0)

Introdução ao Hibernate

Hibernate é o framework para persistência de dados mais utilizado em projetos Java. Sendo uma das primeiras opções a implementar o conceito de mapeamento objeto-relacional (ORM), em pouco tempo se tornou referência entre os desenvolvedores, tendo sido tomado, inclusive, como referência para criação da especificação JPA.

Mas afinal, o que é a JPA? JPA é a especificação do Java que dita como os frameworks ORM devem ser implementados. Ela foi criada com o intuito de padronizar essas soluções. Antes de sua criação existiam diversos frameworks e bibliotecas que abstraiam os desafios da persistência com ORM em Java.

O problema é que cada um fazia isso de uma maneira diferente, o que se tornava um grande problema caso fosse necessário migrar para outra tecnologia. Imagine que você optou por um framework e poucos meses depois a empresa que mantinha esse framework deixou de existir. O que fazer? Basicamente, reescrever sua camada de acesso a dados com uma tecnologia nova.

Isso era ruim não apenas para arquitetos e programadores, mas também para o Java. Como optar por uma tecnologia que nos leva a um problema como esse? A JPA, então, foi criada, dando origem à especificação, e o Hibernate passou a implementá-la.

Primeiros passos no Hibernate

Para o mercado, não basta saber utilizar a API JDBC para persistir dados com Java. Conhecer a API JPA e pelo menos um framework que a implemente é fundamental. A JPA abstrai e simplifica o acesso a dados, tornando transparente ao programador muitas preocupações que ele possui quando lida apenas com a JDBC, entre elas, o mapeamento objeto relacional. Observe a Figura 1.

Arquitetura
de aplicação Java com JPA
Figura 1. Arquitetura de aplicação Java com JPA

Para introduzi-lo à Java Persistence API, reunimos o material a seguir:

Tão ou mais importante que conhecer a JPA é conhecer uma implementação da mesma, como o Hibernate. É com a implementação que, de fato, programamos o acesso a dados de nossa aplicação. E com o Hibernate, podemos, ainda, persistir dados utilizando ou não os recursos da especificação (Figura 2). Para ter o primeiro contato com ele, acesse:

Formulário de Resultado
Figura 2. Persistência de dados com Hibernate

Configurando o Hibernate

Agora que você já teve o primeiro contato com o Hibernate, vamos começar a nos aprofundar em seus recursos. Com o intuito de manter uma sequência lógica, aprenderemos primeiro como configurá-lo.

Quando o configuramos em um projeto, estamos definindo a versão do framework que será utilizada, o banco de dados, os dados para acesso ao banco, entre outras informações. Acesse os posts abaixo para aprender como especificar essas informações

Mapeamento Objeto-Relacional

Com o Hibernate configurado, o próximo passo é realizar o mapeamento das classes às tabelas do banco de dados. Nas primeiras versões isso era feito via XML. Recentemente, com a implementação das annotations, passou a ser feito também via anotações, o que, em pouco tempo, se tornou a opção preferida dos programadores.

Mapeando entidades

No geral, toda classe que possui relação com uma tabela é chamada de entidade. Mas, como fazemos esse mapeamento em Java, como estabelecemos a ligação entre uma classe e uma tabela (Figura 3)? Para saber como fazer isso, acesse os conteúdos a seguir. Vale ressaltar que esse é um dos pontos mais importantes para a persistência, portanto, saber como fazê-lo é fundamental.

Mapeamento Objeto-Relacional
Figura 3. Mapeamento Objeto-Relacional

Para que você conheça alguns problemas que podem ser evitados ao realizar o mapeamento objeto-relacional, preparamos o seguinte conteúdo:

Mapeando relacionamentos

Com as entidades configuradas, as tabelas e colunas definidas, é fundamental também saber como mapear os relacionamentos entre elas. Como declarar em uma classe que um atributo representa a chave estrangeira de uma tabela, como declarar um relacionamento um para um, um para muitos? É sobre esses e outros assuntos que vamos explorar nos posts abaixo:

Outros recursos básicos

Para o correto uso do framework ORM é necessário conhecer outros recursos do mesmo. Nesta seção reunimos alguns deles, como é o caso da Session, interface fundamental do Hibernate para o acesso e persistência de dados.

Para aprender sobre ela, acesse:

Também é recomendado aprender sobre recursos como cascade e lazy e eager loading. As diferentes opções de cascade permitem ao programador definir a melhor forma como um conjunto de dados relacionados (envolvendo pelo menos duas entidades) deve ser salvo, atualizado ou removido.

Quando lidamos com listagens muito grandes, por exemplo, é uma boa prática considerar a melhor maneira como esses dados devem ser recuperados do banco de dados. Com as opções lazy e eager especificamos se todos os dados devem ser obtidos de uma vez ou conforme a demanda do usuário. Esse assunto é explorado nos posts:

Além desses, também preparamos mais alguns conteúdos para que você compreenda o funcionamento do framework e, a partir disso, saiba como melhor explorar seus recursos.

Consultas no Hibernate

Outra importante tarefa que precisamos tratar quando o assunto é persistência de dados é a forma como os dados são consultados. O Hibernate, em conjunto com a JPA, oferece várias opções para isso, do mais baixo ao mais alto nível de abstração.

Os cursos, devcasts e artigos abaixo ensinam como utilizar as principais ferramentas de consulta definidas pela JPA, assim como a soluções criadas pelo framework analisado nesse guia:

JPA

Uma das primeiras opções quando o assunto é consulta a dados é a Java Persistence Query Language, ou JPQL, a qual é introduzida no seguinte vídeo:

Hibernate

No Hibernate, a JPQL foi implementada e renomeada para HQL. Para aprender sobre ela, preparamos os posts abaixo:

Outra solução criada na JPA e implementada pelo Hibernate é a Criteria API. Com essa API podemos criar consultas de forma programática e orientada a objetos, isto mesmo, nós criamos as consultas chamando métodos encadeados. Para conhecê-la, acesse:

Caso você tenha interesse em ter uma visão geral sobre todas essas opções, assim como criar consultas no Hibernate utilizando código SQL (sim, isso é possível, e recomendado algumas vezes), confira os seguintes posts:

Por fim, recentemente, dada a importância que as consultas e o acesso a dados ganharam nessa nova era da informação, o Hibernate criou mais um mecanismo para tal, muito mais robusto e maduro para as necessidade do mercado: o Hibernate Search. Nos posts abaixo exploramos esse assunto:

Na prática

O próximo passo é pôr as mãos na massa com o framework. Com o intuito de auxiliá-lo nesta etapa, o material publicado nos links a seguir pode ser consumido. Você aprenderá como utilizar todos os recursos vistos até aqui e ao final terá não apenas classes mapeadas, mas também CRUDs completos e tudo aquilo que você precisa para criar a camada de acesso a dados.

Lembre-se que ao programar com Hibernate muitas classes e interfaces da JPA estão incluídas. Por isso, em muitos posts você encontrará referências a ambos (especificação e implementação).

Lembre-se também que o desenvolvimento de uma aplicação não se limita à camada de acesso a dados. Deste modo, é comum integrarmos o Hibernate/JPA a outras tecnologias, como exposto nos conteúdos a seguir:

Jersey/Web services

JSF/PrimeFaces

Spring

Validação de dados

Antes de persistir um dado é muito importante validá-lo. Por mais simples que seja um formulário, por exemplo, é comum que usuários preencham algum campo de forma incorreta. A validação possibilita um controle a essa entrada de dados e, com isso, evita problemas caso o dado precise ser processado ou mesmo exibido em um relatório.

Sobre esse assunto muitos programadores se perguntam: O que é melhor? Validar no back-end ou no front-end? Para abordar esse assunto gravamos os seguintes DevCasts:

Nesse contexto o Hibernate disponibiliza o Hibernate Validator, implementação de referência da especificação Bean Validation. Com Bean Validation a análise dos dados é feita nas classes de domínio, e com isso deixa de ser necessário validar dados no back-end e no front-end.

Para aprender sobre o Hibernate Validator, acesse:

Cache

Em algum momento pode ser que a sua aplicação comece a apresentar perda de performance. Um dos motivos para isso pode ser o acesso ao banco de dados. Para contornar situações como essa, uma opção é utilizar Cache, isto é, um mecanismo que mantenha os dados mais acessados, por exemplo, mais próximos da aplicação, de forma a reduzir o acesso ao banco e todo o tempo e recursos gastos com isso (Figura 4).

Cache de dados com Hibernate
Figura 4. Cache de dados com Hibernate

Os posts a seguir apresentam tudo o que você precisa para implementar cache com Hibernate:

Auditoria

O Hibernate também oferece uma solução completa para auditoria de dados, o Hibernate Envers. Com essa solução a auditoria pode ser feita dentro da aplicação e não mais no banco de dados, provendo assim uma maneira menos dependente do banco para observar como os dados e funcionalidades da aplicação estão sendo acessados e manipulados, se está ocorrendo acesso indevido, entre outras possibilidades (Figura 5).

Auditoria de dados com Hibernate Envers
Figura 5. Auditoria de dados com Hibernate Envers

Os posts abaixo apresentam o projeto Envers na teoria e na prática:

Documentação

Como material de referência sobre os recursos do Hibernate, preparamos as documentações a seguir. Utilize-as para consulta rápida:

Conteúdo Extra

Quando estiver programando com o Hibernate, é comum que você se depare com outros detalhes. Neste tópico separamos um conteúdo adicional que pode servir de apoio nessas ocasiões, por exemplo:

Algo comum e que pode gerar problemas ao software devido à quantidade de opções/formatos são as datas. Para auxiliá-lo na manipulação de datas em seus sistemas, preparamos os posts:

Caso você esteja em dúvida e precisa decidir entre um banco de dados relacional e um não relacional (NoSQL), os posts abaixo abordam os pontos que você deve considerar, tratando também da solução não relacional do Hibernate:

Por fim, vale ressaltar que o Hibernate também oferece opções para quem está planejando migrar seus dados para a nuvem. Para se aprofundar neste assunto, confira os posts abaixo:

Como você pôde verificar, o Hibernate é muito mais que um framework ORM. Ele é um projeto que, além de implementar a JPA, fornece um maduro e robusto conjunto de tecnologias que viabilizam um controle completo sobre os dados da sua aplicação.

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Ajude-nos a evoluir: você gostou do post?  (15)  (0)

Para avaliar você precisa ser um assinante MVP :)

Ficou com alguma dúvida?