Opa Galera, blz ?
Eu estou desenvolvendo uma aplicação para aprender umas coisas novas e tal
e gostaria de saber se esse mapeamento que fiz está correto, ou se posso melhora-lo
em algum sentido ?
Agradeço des de já !
O relacionamento das tabelas é de Fornecedor para Material, entao 1 fornecedor tem N Materiais cadastrados.
Fornecedor:
package modelo;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import modelo.Material;
@Entity(name="Fornecedor")
@Table(name="FORNECEDOR")
@SequenceGenerator(name = "seq_fornecedor", sequenceName = "seq_id_fornecedor")
public class Fornecedor implements Serializable {
@Id
@Column(name="CD_FORNECEDOR")
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "seq_fornecedor")
private int CD_FORNECEDOR;
@OneToMany(fetch=FetchType.LAZY) //http://recurser.com/articles/2007/11/26/hibernate-onetomany-relationships/
@Column(name="MATERIAL")
private List<Material> MATERIAL = new ArrayList<Material>();
@Column(name="NM_FORNECEDOR")
private String NM_FORNECEDOR;
@Column(name="CNPJ")
private String CNPJ;
public int getCD_FORNECEDOR() {
return CD_FORNECEDOR;
}
public void setCD_FORNECEDOR(int CD_FORNECEDOR) {
this.CD_FORNECEDOR = CD_FORNECEDOR;
}
public String getNM_FORNECEDOR() {
return NM_FORNECEDOR;
}
public void setNM_FORNECEDOR(String NM_FORNECEDOR) {
this.NM_FORNECEDOR = NM_FORNECEDOR;
}
public String getCNPJ() {
return CNPJ;
}
public void setCNPJ(String CNPJ) {
this.CNPJ = CNPJ;
}
public List<Material> getMATERIAL() {
return MATERIAL;
}
public void setMATERIAL(List<Material> MATERIAL) {
this.MATERIAL = MATERIAL;
}
}
Material:
package modelo;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity(name="Material")
@Table(name="MATERIAL")
@SequenceGenerator(name = "seq_material", sequenceName = "seq_id_material")
public class Material implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "seq_material")
@Column(name="CD_MATERIAL")
private int CD_MATERIAL;
//@Id ARRUMAR ISSO AQUI
@Column(name="CD_FORNECEDOR")
private int CD_FORNECEDOR;
@Column(name="NM_MATERIAL")
private String NM_MATERIAL;
@Column(name="UNID_MEDIDA")
private String UNID_MEDIDA;
@Column(name="PESO")
private float PESO;
@Column(name="VALOR")
private float VALOR;
@ManyToOne
@JoinColumn(name="MATERIAL")
private Fornecedor fornecedor;
public int getCD_MATERIAL() {
return CD_MATERIAL;
}
public void setCD_MATERIAL(int CD_MATERIAL) {
this.CD_MATERIAL = CD_MATERIAL;
}
public int getCD_FORNECEDOR() {
return CD_FORNECEDOR;
}
public void setCD_FORNECEDOR(int CD_FORNECEDOR) {
this.CD_FORNECEDOR = CD_FORNECEDOR;
}
public String getNM_MATERIAL() {
return NM_MATERIAL;
}
public void setNM_MATERIAL(String NM_MATERIAL) {
this.NM_MATERIAL = NM_MATERIAL;
}
public String getUNID_MEDIDA() {
return UNID_MEDIDA;
}
public void setUNID_MEDIDA(String UNID_MEDIDA) {
this.UNID_MEDIDA = UNID_MEDIDA;
}
public float getPESO() {
return PESO;
}
public void setPESO(float PESO) {
this.PESO = PESO;
}
public float getVALOR() {
return VALOR;
}
public void setVALOR(float VALOR) {
this.VALOR = VALOR;
}
}
Uma coisa que aconteceu é que o Hibernate Cria uma Tabela chamada de “Fornecedor_Material”,
entretanto não coloca dados nela quado eu faço um insert e tals ! E ela não está respeitando a
validação de FK ! Posso inserir um material para um fornecedor que não Existe !
Outra coisa é que na classe de Material recebe a PK de Fornecedor (CD_FORNECEDOR), só que
os exemplos que eu achei na net eles criam um outro campo do tipo de Fornecedor para usar como
relacionamento ! Qual a melhor forma de tratar isso ??
Obrigado ! =]