Problema com Many-To-Many na hora das Remoções

0 respostas
usphisics

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 :?: :?: :?:

Criado 21 de fevereiro de 2008
Respostas 0
Participantes 1