Olá galera,
Seguinte, to com problema pra revomer um item de um Set de uma entity root. O problema é que eu removo o item da collection na boa, mas quando executo o merge(obj) e faço o commit o objeto retornado continua com o item lá na collection.
Tenho certeza que é algo que eu não to sabendo fazer e é por isso que eu to aqui.
Como bom perguntador, seguem os trechos de código pertinentes.
Relacionamento no objeto root.
@OneToMany(mappedBy = "event", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Subscription> subscriptions;
Relacionamento no objeto que eu quero remover.
@ManyToOne(cascade = CascadeType.ALL, optional = false)
@JoinColumn(name = "eventId", referencedColumnName = "id")
private Event event;
Código onde eu removo o objeto e peço o update.
event.remove(subscription);
repository.update(event);
Tem um Decorator no meio dessa chamada mas tudo o que ele faz é chamar o metodo merge do DAO conforme nesse código.
public PersistentObject merge(PersistentObject obj) {
em = getEntityManager();
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
obj = em.merge(obj);
tx.commit();
return obj;
} catch (PersistenceException pe) {
pe.printStackTrace();
if (tx.isActive())
tx.rollback();
throw pe;
} finally {
close();
}
}
E aí? Alguma dica?
Abração,