Os profissionais deTI que trabalham com a orientação a objetos através do Java geralmente optam pelo JPA ou Hibernate ao implementar a persistência em suas aplicações. Neste artigo, daremos vez ao Hibernate, solução que simplifica e facilita o armazenamento e a recuperação de informações e que, assim como a JPA, adota o Mapeamento Objeto-Relacional (Object/Relational Mapping – ORM), uma técnica que abstrai as diferenças entre o modelo relacional e o modelo OO.
As principais vantagens do ORM são viabilizar a persistência dos dados, permitir que a aplicação permaneça totalmente orientada a objetos e possibilitar que possíveis mudanças na base de dados impliquem em um menor impacto sobre a aplicação, tendo em vista que apenas os objetos relacionados com as tabelas alteradas precisarão de mudanças.
Um dos principais recursos que o Hibernate oferece é a opção de criar mapeamentos entre modelos de objetos e modelos relacionais através de anotações. A partir desse mecanismo podemos especificar, no código, as mais diversas associações existentes dentro de um banco de dados.
Dentre as vantagens, o uso de anotações nos permite um código mais intuitivo do que os arquivos baseados em XML e ainda supre algumas das suas limitações, tais como: facilidade de visualização das configurações, checagem do código da aplicação em tempo de compilação e possibilidade de refactoring.
Antes de iniciar a codificação, no entanto, é comum a desenvolvedores realizar a modelagem do banco de dados. Nesse momento, muitos consideram como etapa mais complexa a necessidade de utilizar relacionamentos dos tipos “1:N” (um-para-muitos) e “N:N” (muitos-para-muitos). Essas opções, bastante presentes no mundo real, normalmente são um pouco mais difíceis de especificar porque envolvem um número maior de variáveis a serem consideradas, como a necessidade de definir mais uma tabela, o modo como os dados devem ser carregados do banco, entre outras.
Com base nisso, começaremos este artigo abordando as características dos relacionamentos um-para-muitos e muitos-para-muitos. Em seguida, veremos como modelar um sistema de cadastro considerando cada uma das associações mencionadas. Para tanto, serão empregados, além da linguagem Java, o ambiente de desenvolvimento Eclipse integrado ao Maven e o sistema de gerenciamento de banco de dados MySQL. O Hibernate será usado como solução para abstrair a camada de persistência, viabilizando a interface entre a aplicação e o MySQL.
Associações um-para-muitos
O relacionamento de cardinalidade um-para-muitos (ou muitos-para-um), representado pela notação 1:N (lê-se um para N), é usado quando uma entidade A pode se relacionar com uma ou mais entidades B e B pode estar relacionado a apenas uma entidade A. Vejamos um exemplo: um time de futebol pode ter vários jogadores, mas um jogador só pode estar relacionado a um time. A Figura 1 demonstra mais um exemplo desse tipo de relacionamento. Neste caso, um Setor pode ter vários Empregados trabalhando nele, e um Empregado só pode estar vinculado a um Setor.
Ao adotar o Hibernate, o uso desse tipo de relacionamento em nossos projetos implica na utilização das anotações @OneToMany e @ManyToOne, como veremos adiante.
Associações muitos-para-muitos
O relacionamento de cardinalidade muitos-para-muitos, representado pela notação N:N (lê-se N para N), é usado quando uma entidade A pode se relacionar com uma ou mais entidades B e uma entidade B pode se relacionar com uma ou mais entidades A. Para simplificar a compreensão, vejamos as seguintes situações:
- Um usuário do sistema pode fazer parte de vários grupos de usuários e em um grupo pode haver diversos usuário;
- Um autor pode publicar vários livros e um livro pode ser escrito por vários autores.
Para estabelecer esse tipo de relacionamento, devemos ter três tabelas, sendo a terceira responsável por manter a ligação entre as outras duas. Para isso, é preciso que as duas primeiras tabelas contenham uma coluna que seja chave primária.
A Figura 2 mostra um exemplo desse tipo de relacionamento. Neste caso, um Empregado pode desenvolver um ou mais Projetos e um Projeto é desenvolvido por um ou mais Empregados.
As colunas que são chaves primárias na primeira e na segunda tabela devem aparecer na terceira como chaves estrangeiras. Assim, esta tabela terá duas chaves estrangeiras, que formam uma chave primária composta.
A anotação que representa esse tipo de associação no Hibernate é a @ManyToMany.
Configuração do ambiente
Após conhecer as principais informações sobre os relacionamentos que abordaremos, vamos partir para a parte prática e desenvolver uma aplicação que possibilite ao leitor aprender como implementar cada uma destas opções a partir da utilização do framework Hibernate. Antes de iniciar o desenvolvimento, vamos configurar o ambiente que utilizaremos para implementar a aplicação exemplo.
Preparando o ambiente de desenvolvimento
Como ambiente de desenvolvimento, optamos por utilizar o Eclipse, por se tratar da solução mais flexível e utilizada no mercado. Na seção Links encontra-se o endereço para download desta IDE. Aqui, foi adotada a versão Luna SR2 (4.4.2).
O processo de instalação do Eclipse é bastante simples, sendo necessário apenas ter o JDK 8 instalado no sistema. Na seção Links também está disponível o endereço onde pode ser obtido este JDK.
Após baixar o arquivo do Eclipse adequado ao seu sistema, descompacte-o no local de sua preferência. Em nosso caso, optamos pela pasta C:\Eclipse_Luna. Logo após, basta executar o arquivo eclipse.exe (em ambientes Windows).
Integrando o Maven ao Eclipse
O Maven é uma ferramenta pertencente à Fundação Apache que tem como finalidade o gerenciamento e automação da construção (build) de projetos Java. De acordo com o próprio site do Maven, este tem os seguintes objetivos: prover um padrão para o desenvolvimento de aplicações; impor uma estrutura para organizar o projeto; controlar a versão e artefatos; e possibilitar o compartilhamento de bibliotecas entre vários projetos. Como grande destaque, a principal facilidade ofertada pelo Maven é o gerenciamento de dependências e este será o nosso motivador para adotá-lo em parceria com a IDE Eclipse.
Na seção Links encontra-se o endereço para download desta ferramenta. Aqui, adotamos a versão 3.3.1. Após o download, crie uma pasta de nome Maven e copie o arquivo baixado para ela. Por fi ...
Confira outros conteúdos:
Introdução ao JDBC
Novidades do Java
Teste unitário com JUnit
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>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.