@ManyToOne Relacionamento N:1
Anotação @ManyToOne
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
Last updated
Was this helpful?