Duvidas com Relacionamento

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 :smiley:

 @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 :smiley:

 @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)…