Cascade no @OneToMany

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.

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.

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: