Boa tarde pessoal
Hoje utilizo Hibernate em minha aplicação, mas gostaria de relacionar as tabelas, pois hoje esta manual, mas surgiram problemas conceituais até, que precisam ficar mais claros…
Tenho o Item 1, que possui um ou mais Itens 2, que possuem um ou mais Itens 3.
Para as classes itens, eu defino por onde o relacionamento, 1 - de cima para baixo, 2 - ou de baixo para cima.
1-
@Entity
@IdClass(Item1PK.class)
public Class Item1{
@Id
idItem1
Collection<Item2> item2;
//outros atributos.
}
@Entity
@IdClass(Item2PK.class)
public Class Item2{
@Id
idItem2
Collection<Item3> item3;
//outros atributos.
}
@Entity
@IdClass
public Class Item2{
@Id
iditem3
//outros atributos.
}
2:
@Entity
@IdClass(
public Class Item1{
@Id
idItem1
//outros atributos.
}
@Entity
@IdClass(Item2PK.class)
public Class Item2{
@Id
idItem2
Item1 item1;
//outros atributos.
}
@Entity
@IdClass(Item3PK.class)
public Class Item3{
@Id
idItem3
Item2 item2;
//outros atributos.
}
Eu acredito que seja a um, porque eu leio que um item 1 tem um item 2 que tem um item 3. MAs surgiu a duvida, e resolvi pedir ajuda.
Alguem entendeu, e consegue me ajudar?
Agradecimentos!
Eu ficaria com a dois …
@Entity
public Class Item1{
@Id
idItem1
//outros atributos.
}
@Entity
public Class Item2{
@Id
idItem2
@ManyToOne //a fk por padrão seria item1_id
Item1 item1;
//outros atributos.
}
@Entity
public Class Item3{
@Id
idItem3
@ManyToOne //a fk por padrão seria item2_id
Item2 item2;
//outros atributos.
}
Seguindo a boa prática de mapeamento ORM a entidade ganhadora do relacionamento deve ser a entidade que tem muitos …
Mas se você precisar das collections assim como na opção 1 você pode manter a chave estrangeira na entidade que tem muitos e pode mapear o retorno utilzando
@OneToMany + o atributo mapped by … Seria um OneToMany bidirecional …
Ficam as sugestões… Boa sorte…
[quote=breno500as]Eu ficaria com a dois …
@Entity
public Class Item1{
@Id
idItem1
//outros atributos.
}
@Entity
public Class Item2{
@Id
idItem2
@ManyToOne //a fk por padrão seria item1_id
Item1 item1;
//outros atributos.
}
@Entity
public Class Item3{
@Id
idItem3
@ManyToOne //a fk por padrão seria item2_id
Item2 item2;
//outros atributos.
}
Seguindo a boa prática de mapeamento ORM a entidade ganhadora do relacionamento deve ser a entidade que tem muitos …
Mas se você precisar das collections assim como na opção 1 você pode manter a chave estrangeira na entidade que tem muitos e pode mapear o retorno utilzando
@OneToMany + o atributo mapped by … Seria um OneToMany bidirecional …
Ficam as sugestões… Boa sorte…[/quote]
Obrigado pelas sugestões, mas fiquei com uma duvida.
Terei que usar chave composta, tem como configurar ?
Nesse seu caso não precisa não …
O problema é que a chave de cada um pode repetir…
Posso ter 2 itens2 com chave = 1, mas um pertence ao item1 de chave x e outro ao intem1 de chave y.
Continua o mesmo enquanto baixa a hierarquia.
Sendo assim terei que levar as chaves compostas ao abaixar a hierarquia, não é mesmo?
Item1(1 chave) -> Item2 (2 chaves) - > Item3 (3 chaves)…