rdmegna
Setembro 3, 2009, 2:15pm
#1
Galera,
Eu tenho uma tabela produto que possui o codigo como chave primaria, e uma tabela produto_relação que tem como chave os codigos de dois produtos e uma coluna com um valor inteiro.
Ex:
Table Produto
Codigo varchar pk
Table produto_relacao
Produto1 varchar FK
Produto2 varchar FK
proporcao int
Alguem sabe como eu mapeio essas entidades?
se eu entendi bem oque voce quer fazer, voce pode mapear normal, porque essa tabela produto_relacao vai apenas fazer um relacionamento UM PRA UM, e cada regristro vai ter um id de cada tabela nesse relacionamento
exemplo :
@JoinColumn (name = “PROD1_ID”, referencedColumnName = “PROD2_ID”)
@OneToOne (cascade = { CascadeType.REFRESH, CascadeType.MERGE })
private Produto produto;
(esse mapeamento é na classe produto_relaciona)
faça o mesmo no produto2, e se eu voce estiver querendo fazer oque eu entendi, vai dar certo
qualquer outra dúvida vai no hibernate.org que é super explicativo a documentação
rdmegna
Setembro 3, 2009, 3:48pm
#3
Então, eu acho que não é um pra um, e sim muitos para um.
Deixa eu detalhar melhor as tabelas:
Create table produto(
codigo varchar() pk,
descricao varchar()
)
create table produto_relacao(
codigo_pai varchar(),
codigo_filho varchar(),
proporcao int,
constraint produto_relacao_pk primary_key (codigo_pai, codigo_filho),
constraint produto_pai foreign_key (codigo_pai) references produto.codigo,
constraint produto_filho foreign_key (codigo_filho) references produto.codigo
)
Eu estou olhando o mateiral do hibernate.org mas tá meio dificil!! rs
rdmegna
Setembro 3, 2009, 4:25pm
#4
Eu criei uma outra classe, para a chave composta
[code]@Embeddable
public class ProdutoRelacaoPK implements Serializable{
@Basic (optional = false)
@Column (name = “produto_codigo_pai”, length=30)
private String codigoPai;
@Basic (optional = false)
@Column (name = “produto_codigo_filho”, length=30)
private String codigoFilho;
public void setCodigoPai(String codigoPai) {
this.codigoPai = codigoPai;
}
public String getCodigoPai() {
return codigoPai;
}
public void setCodigoFilho(String codigoFilho) {
this.codigoFilho = codigoFilho;
}
public String getCodigoFilho() {
return codigoFilho;
}
}[/code]
E a classe produtoRelacao ficou assim:
[code]@Entity
@Table (name = “produto_relacao”)
public class ProdutoRelacao implements Serializable{
private static final long serialVersionUID = 1L;
@EmbeddedId
protected ProdutoRelacaoPK produtoRelacaoPK;
@JoinColumn(name = "produto_codigo_pai", referencedColumnName = "prod_cod", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Produto pai;
@JoinColumn(name = "produto_codigo_filho", referencedColumnName = "prod_cod", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Produto filho;
@Column(name="filhos_para_pai",
nullable=false)
private float filhosParaPai;
}[/code]
cara, o relacionamento doque voce ta tentando fazer é um pra um sim pelo oque eu entendi,
essa tabela produto_relaciona, vai guardar o id de um produto pai , que será relacionado com outro produto filho.
cada produto_relaciona só vai ter UM filho e UM pai, não é mesmo ?
rdmegna
Setembro 3, 2009, 8:05pm
#6
ah, é que isso eu não especifiquei mesmo… falha minha.
Um produto pai pode ter vários filhos, e um produto filho pode ter vários pais.