Cascade no @OneToMany

2 respostas
novato25

Bom dia,

Estou fazendo fazendo um merge na Entidade Bar que tem uma lista de Foo. Quando configuro o relacionamento como especificado abaixo, é atualiazado os regitros, mas os registros orfãos não são removidos (Exemplo: Bar tem dois registros foos e estou atualizando Bar apenas com um registro foo. Gostaria que neste caso o outro registro fosse deletado).

@OneToMany(mappedBy="bar", fetch=FetchType.LAZY, cascade={CascadeType.MERGE}, orphanRemoval=true) @SQLDelete(sql="UPDATE tb_foo SET id_bar = null WHERE id = ?") public Set<Foo> getFoos() { return foos; }

Mas, quando faço desta forma, funciona:

@OneToMany(mappedBy="bar", fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.MERGE}, orphanRemoval=true) @SQLDelete(sql="UPDATE tb_foo SET id_bar = null WHERE id = ?") public Set<Foo> getFoos() { return foos; }

Sendo que assim, quando eu for persistir Bar, Foo também será persistido, e eu não quero isso, pois os Foos já são pré-existentes e desta forma dá erro de primary key duplicada. Alguém poderia me explicar ou ter uma solução para este caso? Obrigado.

2 Respostas

drsmachado

Aqui foi indicado um problema parecido e, por mais incrível que pareça, a questão apontada como possível causa do problema é uma implementação incorreta/ausente dos métodos hashCode e equals.
Tente isso.

novato25

oi drsmachado,

Obrigado pela resposta. Os métodos hashCode e equals foram implementados utilizando o atributo id de suas respectivas classes. Acredito que o problema não seja este. :frowning:

Criado 6 de junho de 2013
Ultima resposta 6 de jun. de 2013
Respostas 2
Participantes 2