Quer ter acesso a todos os cursos desse Guia?
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.
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 influenciado, inclusive, a 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, como podemos entender melhor nos seguintes cursos:
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.
Para introduzi-lo à Java Persistence API, reunimos o material a seguir:
-
ArtigoJava Persistence API (JPA): Primeiros passos
-
ArtigoJava JPA: A evolução da persistência em Java
-
ArtigoJava Persistence API (JPA): Explorando o EntityManager
-
ArtigoJPA 2.0 - Persistência a toda prova
-
CursoMinha primeira app Java e Hibernate
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:
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.
-
ArtigoMapeamento Hibernate: Trabalhando com arquivos XML
-
ArtigoHibernate Annotations
-
ArtigoMapeamento no Hibernate com Anotações
-
ArtigoMapeamento Hibernate: Configurando Tabelas e Colunas
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:
-
ArtigoComo criar relacionamentos entre entidades com Hibernate
-
ArtigoHibernate Mapping: Mapeando Relacionamentos entre Entidades
-
VídeoMapeando um relacionamento M x N no Hibernate
-
DevCastRelacionamento ManyToMany com coluna extra na JoinTable no Hibernate
-
ArtigoAssociações com mappedBy no Hibernate
-
ArtigoManyToMany Hibernate: Variações Unidirecional e Bidirecional
-
ArtigoControlando múltiplas coleções com Hibernate
-
ArtigoTipos de Heranca no Hibernate
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:
-
ArtigoEntendendo Hibernate Session
-
ArtigoComo usar o Hibernate Session para manipular dados
-
VídeoDetecção Automática de Estado com Hibernate
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:
-
ArtigoIntrodução ao Hibernate Query Language (HQL)
-
ArtigoHibernate Query Language - Do início ao fim
-
ArtigoExemplos práticos de como utilizar HQL
-
ArtigoConsultas com HQL no Hibernate 3
-
ArtigoEstratégias de busca (fetch) com Hibernate
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:
-
ArtigoDominando a API de consultas do Hibernate
-
VídeoHibernate Framework: Consultas nativas com Hibernate
-
ArtigoFiltrando Resultados com Hibernate
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.
-
ArtigoUma abordagem prática ao Hibernate - Parte 1
-
ArtigoUma abordagem prática ao Hibernate - Parte 2
-
ArtigoDesenvolvendo com Hibernate
-
ArtigoPersistindo dados em Java com JPA
-
ArtigoJPA e Hibernate: Acessando dados em aplicações Java
-
ArtigoPersistindo Objetos com Java, Hibernate e PostgreSQL
-
ArtigoGenerics: Uma opção ao acesso a dados com o padrão DAO
-
CursoJSF e Hibernate: Criando uma aplicação de cadastro de lembretes
-
CursoAplicação completa utilizando Hibernate
-
ArtigoSistema de Autenticação Web utilizando JPA
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
-
ArtigoCrie uma aplicação de acesso a dados com Primefaces e Hibernate
-
ArtigoIniciando um projeto Java Web com Hibernate, JSF e Primefaces
-
ArtigoMaven, JSF 2, Spring e Hibernate
-
ArtigoJava WEB: Criando uma tela de Login com JPA, JSF, PrimeFaces e MySQL
-
ArtigoRelatórios avançados com Hibernate, JasperReports e PrimeFaces
Spring
-
ArtigoComo integrar os frameworks Spring e Hibernate
-
CursoPrimeira aplicação Web com Spring MVC e JPA
-
ArtigoSpring MVC: Desenvolvendo aplicações web com Hibernate Framework
-
ArtigoSegurança com Spring Security 3, JPA 2 e JSF 2
-
ArtigoAngularJS: Criando Integrações com Spring MVC e Hibernate
-
ArtigoConfigurando pool de conexões c3p0 com Spring e Hibernate
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:
-
CursoBean Validation: Validação de dados em Java Novo!
-
ArtigoConhecendo o Hibernate Validator
-
ArtigoHibernate Validator e a consistência dos dados
-
ArtigoHibernate Validator: como validar objetos e ter mais controle sobre os dados
-
ArtigoHibernate Validator: Validando dados no back-end com anotações
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).
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).
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:
-
ArtigoHibernate Framework: OrphanRemoval com Hibernate
-
VídeoAtribuindo versões as suas entidades utilizando Hibernate
-
ArtigoHibernate Spatial: Trabalhando com coordenadas geográficas
-
ArtigoManual de Etiqueta do Hibernate
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:
-
ArtigoHibernate: Persistindo datas no Java sem incompatibilidade de tipos
-
VídeoJava 8 - Date and Time com JPA
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:
-
ArtigoJPA/Hibernate ou NoSQL, qual utilizar?
-
VídeoComo utilizar o Hibernate OGM para persistência de dados
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:
-
ArtigoHibernate SaaS: Suas aplicações como serviço
-
ArtigoMultitenancy e Hibernate Shards
-
ArtigoHibernate Shards: Multi-tenancy na prática
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.
Saiba mais: JDBC
JDBC é a API base para acesso a dados em Java. É com ela que o programador Java começará a escrever seus primeiros comandos SQL, bem como acessar diferentes bancos de dados, sem precisar de uma API específica para cada um deles. Sendo assim, mesmo quando utilizamos um framework de alto nível, a JDBC está presente.
Para saber mais sobre a JDBC, acesse:
-
CursoO que é JDBC?
-
ArtigoIntrodução à API Java Database Connectivity (JDBC)
-
ArtigoAprendendo Java com JDBC
-
ArtigoManipulando dados com JDBC em Java
-
VídeoPersistindo valores em mais de uma tabela com relacionamento no JDBC
-
ArtigoJava JDBC: Melhorando o desempenho de aplicações Java
-
ArtigoJDBC além do básico
Mais sobre Java
Além dos cursos e exemplos sugeridos nesse guia, a DevMedia publica com frequência novos conteúdos sobre Java, os quais você pode conferir nos Guias de Consulta abaixo:
-
Guia de CarreiraProgramador Java Guia
-
Guia de consultaLinguagem Java Guia
-
Guia de consultaJSF - JavaServer Faces Guia
-
Guia de consultaSpring Framework Guia
-
Guia de consultaJava Enterprise Edition - Java EE Guia
-
Guia de consultaREST e Java Guia
-
Guia de consultaPadrões de Projeto em Java Guia
-
Guia de consultaTestes e DevOps Guia
-
Guia de consultaBigData com Java Guia
Além disso, você pode conferir todo o conteúdo de Java clicando aqui.
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>