JPA – Relacionamentos OneToOne, ManyToOne, OneToMany, ManyToMany

Neste tutorial irei mostrar como a JPA utiliza anotações para criar uma interface mais transparente, entre o código-fonte orientado a objetos e os banco de dados relacionais.
Será utilizado para o exemplo uma aplicação chamada Blog.
Vou explicar como usar a JPA e as anotações Java para lidar com relacionamentos de dados de uma maneira orientada a objetos.
Este tutorial irá ajudar a quem possui os conceitos básicos de JPA e quer aprender um pouco mais sobre orientação a objetos dos relacionamentos JPA.
Os resultados de relacionamentos de dados, se utilizando orientação à objetos, são mais fáceis de se gerenciar.
Os dados fazem parte de qualquer aplicação. E igualmente importantes são os relacionamentos entre os diferentes dados.
Os bancos de dados relacionais, oferecem suporte a vários tipos diferentes de relacionamentos entre tabelas, todos projetados para reforçar a integridade referencial.
Os aplicativos Java dependem de uma rede de relacionamentos de dados, que podem se tornar uma bagunça, se configurados da forma errada.

Na JPA os relacionamentos existentes são: OneToOne, ManyToOne, OneToMany, ManyToMany.

Relacionamento @OneToOne

JPA

No relacionamento OneToOne, um item pode pertencer a apenas um outro item, é uma ligação um para um. Isso significa que cada linha de uma entidade se refere a apenas uma linha de outra entidade.
Vamos considerar o exemplo acima. Blog e Categoria de forma unidirecional reversa, a relação é uma relação OneToOne.
Isso significa que cada blog pertence a apenas uma categoria.

A anotação para mapear uma única entidade para uma única outra entidade é @OneToOne.

Abaixo como fica na classe Blog

JPA

Abaixo como fica na classe Categoria

JPA

Antes de se configurar o modelo citado no exemplo, temos de lembrar que um relacionamento tem um lado proprietário, de preferência o lado que manterá a chave estrangeira no banco de dados.

Relacionamento @ManyToOne

JPA

Relação ManyToOne entre entidades: onde uma entidade é referenciada com outra entidade que contém valores únicos.
Em bancos de dados relacionais, esses relacionamentos são aplicáveis ​​usando chave estrangeira/chave primária entre as tabelas.

Vamos considerar um exemplo de relação entre entidades de Blog e Seção.
De maneira unidirecional, ou seja, de blogs para seções, a relação muitos para um é aplicável.
Isso significa que cada registro de blog contém um código de seção, que deve ser uma chave primária na tabela seções.

A anotação para mapear esse tipo de relacionamento de muitas entidades de seção para uma única outra entidade blog é @ManyToOne.

Abaixo como fica na classe Blog

JPA

Relacionamento @OneToMany

JPA

Neste relacionamento, cada linha de uma entidade é referenciada a muitos registros filho em outra entidade.
O importante é que os registros de filhos não podem ter vários pais. Em uma relação OneToMany entre a Tabela A e a Tabela B, cada linha da Tabela A está ligada a 0, 1 ou muitas linhas da Tabela B.
Se o Blog e a Seção estiverem de maneira unidirecional reversa, a relação será uma relação OneToMany.
No nosso exemplo, seria um blog e suas seções. Um blog pode fazer parte de várias seções.

A anotação para mapear esse tipo de relacionamento de uma única entidade blog para muitas entidades de seção para é @OneToMany.

Abaixo como fica na classe Seção

JPA

Relacionamento @ManyToMany

JPA

O relacionamento muitos para muitos é onde uma ou mais linhas de uma entidade são associadas a mais de uma linha em outra entidade.
Vamos considerar um exemplo de relação entre as entidades Blog e Período. Na maneira bidirecional, tanto o blog quanto o período têm relação muitos para um. Isso significa que cada registro de Blog é referido por conjunto de Período (códigos de período), que devem ser chaves primárias na tabela Blog e armazenadas na tabela blog_periodo e vice-versa. Aqui, a tabela blog_periodo contém ambos os campos de chave estrangeira.

Os relacionamentos ManyToMany exigem um pouco mais de trabalho do que os outros relacionamentos.

Efetivamente, em um banco de dados, um relacionamento ManyToMany envolve uma tabela intermediária que faz referência a ambas as outras tabelas.

Portanto, para nosso exemplo, o relacionamento ManyToMany será aquele entre as instâncias Blog e Período, pois um blog ter vários períodos e um período pode ter participação de vários blogs.

A anotação para mapear esse tipo de relacionamento de muitas entidades blog para muitas entidades de período para é @ManyToMany.

Abaixo como fica na classe Blog

JPA

Abaixo como fica na classe Período

JPA

Abaixo segue um diagrama de classes com todos os relacionamentos juntos.

JPA

Segue o exemplo de uma aplicação Java com JPA, com todos os relacionamentos, para fazer os testes, utilizando Hibernate: Baixar Código-Fonte via GitHub

No vídeo abaixo, irei mostrar este tutorial.

Para ver o vídeo no YouTube Clique Aqui

Por favor, deixe seu like se gostar da dica.

Fonte: https://www.oracle.com/java/technologies/persistence-jsp.html
https://hibernate.org/orm/

Esta entrada foi publicada em Java SE. Adicione o link permanenteaos seus favoritos.

Os comentários estão encerrados.