Persist cascate gerando id no banco

3 respostas
C

Tenho as classes
A e B
B tem um pk de A.
ex

A
id
nome

B
id
nomeB
fk_A

A a = new A();
a.setNome(“A”);

B b = new B();

b.setNomeB(“B”);

b.setFK_A(a);

em.persit(b);

botei o mapeamento para salvar em cascate. e mandei gerar o id no banco .
queria poder persit b e ele persist A .
quando do persit em A ele gera o id .
e quando vou dar o persist emm B ele da erro reclamando que o id de A esta null.
alguem sabe como fazer isso ?persist o object b ele salvar A gerando o id já que estou mandando gerar no banco .

3 Respostas

B

recupere esse id do banco e sete na classe B antes de tentar persistí-la. seria bem mais fácil se você postasse o código.

C

O que vc está falando é o que eu quero evitar de fazer pq senão vou ter que criar um persit especifico para cada objeto do meu projeto.
quero evitar de fazer isso se tiver como .

Lavieri

Tem certeza que colocou o mapeamento ??

mostra o mapeamento... por exemplo, usando JPA seria

import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import static javax.persistence.FetchType.EAGER;
import javax.persistence.Column;
import static javax.persistence.CascadeType.MERGE;
import static javax.persistence.CascadeType.PERSIST;
import static javax.persistence.CascadeType.REFRESH;

public class B {
    @Id 
    @GeneratedValue(strategy = IDENTITY)
    private Integer id;
    
    @Column(name="nome")
    private String nomeB;

    @ManyToOne(fetch=EAGER,cascade={PERSIST,MERGE,REFRESH})
    @JoinColumn(name="fk_a", nullable=false)
    private A a;
}

com esse mapeamento funciona... pq aqui pra mim funciona...

c quiser que quando B for apagado, ele tb apague A.... ai precisa adcionar o cascade REMOVE, ou então no lugar ods 3 colocar cascade ALL

Criado 8 de abril de 2009
Ultima resposta 8 de abr. de 2009
Respostas 3
Participantes 3