pimenta
Fevereiro 18, 2010, 4:24pm
#1
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
Tabela B
Tabela C
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.
pimenta
Fevereiro 18, 2010, 4:50pm
#3
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.
Requena
Fevereiro 18, 2010, 5:08pm
#5
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…