Olá pessoal…
Então estou com um problema estranho…estou com duas classe que mapiei c o Hibernate para duas tabelas e fiz um relacionamento entre elas N-p-N bidirecional certo…Blz.
Estou fazendo uns teste e vi que quando deleto uma instância de um dos lados tudo ocorre certo…só ele é deletado e a relação é claro…porém se mando deletar um intância do outro lado ou ela não é deletada (qd não configura nada ou qd deixo como CascadeType.Persist) ou qd coloco CascadeType.Remove ele remove a instância q mandei…a relação, a instância q estava relacionado e também todas as relação da instância q estava relacionada…
Vixi q bagunça…
Vou passar o código q fica melhor…
São duas classes:
Cliente
@ManyToMany(mappedBy = "clientes")
private Set<Produto> produtos = new HashSet<Produto>();
Produto
@ManyToMany()
@JoinTable(name = "Produto_Cliente",
joinColumns = {@JoinColumn(name="ID_PRODUTO")},
inverseJoinColumns = {@JoinColumn(name = "ID_CLIENTE")}
)
private Set<Cliente> clientes = new HashSet<Cliente>();
Agora vamos aos teste…desse jeito eu faço:
Insiro na BD 1 cliente e 3 produtos e mando fazer a relação entre eles…de tal forma q o cliente se relacione c os produtos…
Na base fico q 3 tabelas uma p cliente(c 1 tupla), uma p produto(c 3 tuplas) e uma para a relação entre eles (c 3 tuplas tb)…
Bom se eu mandar deletar um produto ele vai lá remover o produto e a relação c o cliente q ele pertencia…porém não remove o cliente, blz é isso mesmo q eu quero.
Agora vamos tentar pelo outro lado…
Vou persistir agora 1 produto e para ele 3 clientes e relacionar os 3 clientes c esse produto (lembrando q o mapeamento foi feito N-to-N bidirecional)
Ok até aqui tudo certo…
Porém:
Se eu mandar deletar um dos cliente ele simplemente não é deletado…
:?: :?: :?: :?:
Ele fala q foi encontrado um registro filho :?: :?: :?:
Estranho pq de uma lado ele encontra tal filho mas do outro não …
Vi q do lado q ocorre certo 1ª ele deleta a tupla na tabela de relação e só depois na tabela produto…
E tb vi qd tento deletar pelo outro lado ele vai direto tentar remover da tabela cliente e q por isso ele não remoe visto q existe uma referência na tabela de relacionamento…
Não entendo pq de uma lado ele é INTELIGENTE e do outro não :?: :?: :?: