Boa Tarde Pessoal tenho uma grande dúvida sobre mapeamento e associações no hibernate, segue minha dúvida:
Suponhamos que eu tenha três tabelas:
TABELA FEIJAO
----> ID
----> TIPO
TABELA MARCA
—> ID
—> NOME_MARCA
TABELA FEIJAO_MARCA
----> ID
----> ID_FEIJAO
----> ID_MARCA
----> DATA
Nestes Casos como ficaria o mapeamento no hibernate? Como a tabela FEIJAO_MARCA possui 2 atributos fora os IDS, que seria o ID da tabela e a DATA seria criado uma classe específica para FeijaoMarca e os ids “ID_FEIJAO” e “ID_MARCA” virariam chaves compostas?
create table feijao(
id_feijao int not null auto_increment,
tipo varchar(10) null,
primary key (id_feijao)
);
create table marca(
id_marca int not null auto_increment,
nome_marca varchar(10) null,
data date null,
primary key (id_marca)
);
create table feijao_marca(
id_marca int not null,
id_feijao int not null,
data date null,
primary key (id_feijao, id_marca),
constraint fk_feijao_marca_marca
foreing key (id_marca) references marca (id_marca),
constraint fk_feijao_marca_feijao
foreing key (id_feijao) references feijao (id_feijao)
);[/code]
As classes
[code]@Entity
@Table(name="feijao")
public class Feijao implements Serializable{
@Id
@GeneratedValue
@Column(name="id_feijao)
private Integer feijao;
@Column(name ="tipo")
private String tipo;
@Column(name="data")
private Date data;
//Mapeamentos muitos para muitos
@ManyToMany
// o JoinTable indica qual a tabela que faz a relacionamento. O JoinsColumns e Inverse indica as chave primaria das tabelas
@JoinTable(name ="feijao_marca", joinColumns = {@JoinColumn(name ="id_marca")}, inverseJoinColumns = {@JoinColum(name="id_feijao")})
}
@Entity
@Table(name="marca")
public class Marca implements Serializable {
@Id
@GeneratedValue
@Column(name="id_marca")
private Integer marca;
@Column(name="nome_marca")
private String nome;
}
Jardel Obrigado isso é mais ou menos o que eu já pensava mais tipo a minha situação é a seguinte:
Todo Feijão Pode ter mais de uma marca por esse motivo eu coloquei que haveria o ID na tabela de FEIJAO_MARCA por que eu queria diferenciar os dados na tabela de FEIJAO_MARCA pelo id, mais pelo que vejo a solução seria pegar o id_marca e id_feijão e fazer uma chave composta?
[quote=brluan]Jardel Obrigado isso é mais ou menos o que eu já pensava mais tipo a minha situação é a seguinte:
Todo Feijão Pode ter mais de uma marca por esse motivo eu coloquei que haveria o ID na tabela de FEIJAO_MARCA por que eu queria diferenciar os dados na tabela de FEIJAO_MARCA pelo id, mais pelo que vejo a solução seria pegar o id_marca e id_feijão e fazer uma chave composta?[/quote]
Por isso o mapeamento de Muitos para Muitos @ManytoMany, pois um feijão pode ter mas de uma marca.
Na chave composta voce teria a primary key de feijao e marca.
Jardel meus grande agradecimento por você me ajudar eu ainda não conseguia compreender o motivo que em todos os exemplos a tabela de relação many-to-many não possuía um id, agora esta bem esclarecido e minha dor de cabeça com o mapeamento vai diminuir muito já que a minha maior dificuldade ainda são as associações, Agradecido mesmo. Mais uma vez muito obrigado.