Desenvolvimento
  • JAVA
  • Java
    • Integração Java e C++ com JNI
    • Objetos Distribuídos com RMI
    • Teclas de Atalho do Eclipse
    • Apache Maven Framework
    • Hibernate Framework
      • @OneToMany Relacionamento 1:N
      • @ManyToOne Relacionamento N:1
  • WebServices
    • Web Services e Arquitetura Orientada a Serviços
    • Gerando Web Services PHP com NuSoap
    • Enviando uma Requisição SOAP a um Serviço
    • Web Services com Spring e Apache CXF
    • Web Services com JAX-WS
  • Microservices
    • Introdução à Microservices
  • Design Patterns Java
    • Design Patterns
  • Documentações Oficiais
  • Apache Maven
  • Apache Struts
  • Docker Hub
  • Maven Repository
  • Spring Framework
Powered by GitBook
On this page

Was this helpful?

  1. Java
  2. Hibernate Framework

@ManyToOne Relacionamento N:1

Anotação @ManyToOne

Previous@OneToMany Relacionamento 1:NNextWeb Services e Arquitetura Orientada a Serviços

Last updated 4 years ago

Was this helpful?

Exemplificando a criação de um relacionamento N:1, utilizando as anotações do Framework.

A anotação @ManyToOne representará o relacionamento na classe Produto. Segue a implementação das classes persistentes:

Classe Persistente Categoria

package br.com.rel.hibernate.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="tb_categoria")
public class Categoria {

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private Integer id;
	private String nome;
	private String descricao;

	public Categoria() {

	}
        // Gerar Gets e Sets
}

Classe Persistente Produto

package br.com.rel.hibernate.model;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table(name="tb_produto")
public class Produto {

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private Integer id;
	private String nome;
	private String descricao;
	private String fabricante;
	private Integer quantidade;
	private Double valorUnitario;

	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="id_categoria", insertable=true, updatable=true)
	@Fetch(FetchMode.SELECT)
	@Cascade(CascadeType.SAVE_UPDATE)
	private Categoria categoria;

	public Produto() {

	}
        // Gerar Gets e Sets
}

Na classe Produto criamos um objeto do tipo categoria que será responsável pelo mapeamento do relacionamento neste objeto fazemos as seguintes anotações:

@ManyToOne(fetch= FetchType.EAGER) que representa em sim o relacionamento do tipo N para 1, já o atributo fetch com valor FetchType.EAGER significa que toda vez que o objeto pai for recuperado da base o atributo mapeado também será recuperado;

@JoinColumn é usada para informar qual o nome da coluna que corresponde à chave estrangeira do mapeamento os atributos insertable e updatable que se assumirem true indica que o atributo deve ser inserido ou atualizado;

@Fecth vai definir como o atributo mapeado será recuperado da base, no nosso caso é feito um SELECT para recuperar o atributo. E assim conseguimos mapear o relacionamento N para 1

Relacionamento N:1