Hibernate @ManyToOne, muitos para um com objeto relacional
O Hibernate é o framework mais utilizado em projetos para tratar a persistência dos dados usando modelo relacional em projetos.
Por ser utilizado no modelo relacional, determinadas situações, é preciso criar o relacionamento entre os objetos como se estes fossem as tabelas do banco de dados, montando os relacionamentos de muitos para um, muitos para muitos e um para muitos. Neste artigo será mostrado como fazer o mapeamento de muitos para um e um para muitos entre os objetos.
O Banco de Dados
Para este exemplo usamos um relacionamento entre produto e item_produto e entre produto e estoque, não serão apresentados as colunas complementares, nos detendo apenas no relacionamento que será tratado neste artigo.
Cada item_produto ou estoque possui uma ligação com o produto, desta forma precisamos criar os objetos que representarão as tabelas e após relacionar os objetos de muitos para um e um para muitos.
Criando as Entidades
As entidades que representam as tabelas serão, a classe Produto, ItemProduto e Estoque, que seguem abaixo:
Classe: Produto.java
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="PRODUTO")
public class Produto implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID")
private Long id;
// getter - setter
}
Classe: ItemProduto.java
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="ITEM_PRODUTO")
public class ItemProduto implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID")
private Long id;
// getter - setter
}
Classe: Estoque.java
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="ESTOQUE")
public class Estoque implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID")
private Long id;
// getter - setter
}
Mapeando a classe Produto em ItemProduto
Na classe ItemProduto temos um relacionamento de muitos para um, ou seja cada produto pode estar em nenhum ou muitos ItemProduto, então podemos escrever o relacionamento em objeto relacional da seguinte forma:
@ManyToOne(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
@JoinColumn(name="ID_PRODUTO")
private Produto produto;
O mesmo acontece na classe Estoque, onde o relacionamento de Produto com Estoque será o mesmo.
Entenda o código:
O @ManyToOne
, faz o mapeamento de muitos para um de Produto em ItemProduto, através dele é possível informar os seguintes parâmetros: fetch que pode ser EAGER ou LAZY, o EAGER, sempre vai carregar o produto quando for selecionado um ItemProduto e o LAZY só carrega o produto quando o programador quiser que ele seja carregado, passando esta informação na sentença que vai retornar. Também tem o cascade, que se refere ao tipo de relacionamento, isso deve ser definido ao criar a tabela no banco de dados e aqui usamos apenas a configuração de relação criada no banco de dados.
Ainda tem o @JoinColumn
, que define qual coluna é responsável pela ligação entre os objetos.
Mapeando a classe ItemProduto em Produto
Após criado o relacionamento de muitos para um, é possível criar o relacionamento de um para muitos na tabela de Produto, dessa forma podemos ter acesso a lista de ItemProduto que se relaciona com o Produto em questão, veja:
@OneToMany(mappedBy = "produto", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<ItemProduto> lsItemProduto;
Da mesma forma temos para estoque o mapeamento:
@OneToMany(mappedBy = "produto", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Estoque> lsEstoque;
Pronto, desta forma tem um mapeamento bidirecional de uma para muitos e muitos para um.
Usando Hibernate é possível simplificar o desenvolvimento de aplicações quando se utiliza armazenamento com banco de dados relacional, sem perder a relação entre os registros e sem precisar construir SQL para a comunicação com o Banco de Dados.
Não esqueca de deixar suas dúvidas nos comentários e compartilhar este post.
O que mais falamos no blog
Chaves compostas com HibernateHibernate Native Query, executando SQL Nativo com Hibernate
Hibernate @ManyToOne, muitos para um com objeto relacional
Ver todos da categoria
Últimas postagens
Quick Code: Como converter o StackTrace em StringEscrevendo documentação de software para usuários finais
Instalar o MySQL Workbench on Ubuntu 16.04
Como instalar o Java 10 no Ubuntu
Gerando arquivos PDF com iText
Quick Code: PageRequest Spring Data Deprecated
Mais vistos
Copiar, Colar ou Renomear arquivos usando terminal de comandos do LinuxComo inserir máscara em um EditText no Android
Conheça os comandos terminal linux rm e rmdir
Identificar requisição POST ou GET com PHP
Liberar acesso remoto para servidores MySQL
Como utilizar o Banco de Dados h2 com Spring Boot
FIQUE POR DENTRO
Receba as novidades todo mês em seu e-mail!
Posts Relacionados
Categorias
- ./ Android
- ./ Angular
- ./ Banco de Dados
- ./ Documentação de Sistemas
- ./ Front-end
- ./ Hibernate
- ./ HTML e CSS
- ./ Java
- ./ JavaFX
- ./ jQuery
- ./ Node JS
- ./ PHP
- ./ SEO
- ./ Spring Boot
- ./ Spring Framework
- ./ Typescript
- ./ Ubuntu
- ./ Vue.js
- ./ Web
Últimas postagens
Mais vistos
- 7160 Copiar, Colar ou Renomear arquivos usando terminal de comandos do Linux
- 2052 Como inserir máscara em um EditText no Android
- 1886 Conheça os comandos terminal linux rm e rmdir
- 1662 Identificar requisição POST ou GET com PHP
- 1645 Liberar acesso remoto para servidores MySQL
- 1515 Como utilizar o Banco de Dados h2 com Spring Boot