Por que eu devo ler este artigo:Este artigo é útil por apresentar como estabelecer relacionamentos múltiplos entre entidades com o Hibernate, requisito presente em qualquer aplicação que envolva persistência de dados. Para isso, aprenderemos de forma didática e simples como funcionam as associações OneToMany e ManyToMany, importantes opções para a persistência de dados. Primeiramente, abordaremos cada um desses relacionamentos através de uma análise geral. Em seguida, realizaremos a configuração de um ambiente de desenvolvimento com Maven, Eclipse e MySQL e, por fim, ensinaremos a modelagem de um cenário que faz uso de cada uma das opções mencionadas.

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çãodo tipo 1:N

Figura 1. Associaçãodo tipo 1:N.

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.

Associação do tipo N:N

Figura 2. Associação do tipo N:N.

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 ...

Quer ler esse conteúdo completo? Tenha acesso completo