Inserção com Hibernate

Fala, galera,

To precisando de uma ajuda. Vou tentar reproduzir mais ou menos o meu modelo e logo depois explicar o problema.

Modelo:

Tabela A

  • id_a (PK)
  • nome
  • desc

Tabela B

  • id_b (PK)
  • data

Tabela C

  • id_a (FK)
  • id_b (FK)

A Tabela C é uma associação de A com B de muitos pra muitos.

O problema é o seguinte:
Preciso inserir um registro em A, B e C, mas para o registro de C os id’s de A e B já tem que ter sido gerados.

Alguém pode me ajudar com isso?

PS: Estou usando Hibernate 3 com Annotations.

Abraaaaaços,

Pode fazer assim.
Na sua entidade C:

public class C{

     @OneToOne
     @Cascade(value = { org.hibernate.annotations.CascadeType.ALL })
     @JoinColumn(name = "id_a")
     private A a;

     @OneToOne
     @Cascade(value = { org.hibernate.annotations.CascadeType.ALL })
     @JoinColumn(name = "id_b")
     private B b;
}

Você vai inserir o C depois o A e o B e depois ele irá atualizar pra você.

Espero ter ajudado.

Valeu pela resposta, Henrique.

O problema é que o A e o B tem que ser inseridos antes pra id de ambos ser gerada e depois inserir em C com essas id’s geradas. E os relacionamentos de A com C e B com C é OneToMany.

Você testou o que eu te aconselhei?
Ele irá executar(inserir) em cascata.
Você pode usar assim sem problemas.

@OneToMany(cascade=CascadeType.ALL)

Espero ter ajudado.

Cara na boa, pq vc nao usa um Many-to-many?
tipo

@Entity
public class A {
    @ManyToMany(
        targetEntity=B.class,
        cascade={CascadeType.PERSIST, CascadeType.MERGE}
    )
    @JoinTable(
        name="Tab_C",
        joinColumns=@JoinColumn(name="A_ID"),
        inverseJoinColumns=@JoinColumn(name="B_ID")
    )
    public Collection getBs() {
        return bs;
    }
    ...
}
               

@Entity
public class B {
    @ManyToMany(
        cascade = {CascadeType.PERSIST, CascadeType.MERGE},
        mappedBy = "bs",
        targetEntity = A.class
    )
    public Collection getAs() {
        return as;
    }
}

mais ou menos isso…