@ManyToMany deletando tabelas associativas no saveOrUpdate()

3 respostas
J

Tudo bom pessoal
Tenho um relacionamento @ManyToMany de Produtos X Grupos de produtos…

// Entity bean PRODUTO.

private Set<ProdutoGrupo> grupos;

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
	name = "PRODUTOS_X_GRUPOS",
	joinColumns = { @JoinColumn(name = "ID_PRODUTO") },
	inverseJoinColumns = { @JoinColumn(name = "ID_PRODUTO_GRUPO") })
public Set<ProdutoGrupo> getGrupos() {
	return grupos;
}

… mas quando eu faço…

session.saveOrUpdate(produto); // O campo "produto.grupos" está nulo quando eu vou salvar.

…ele deleta todos os dados da tabela de grupos de produtos.

update
        produto 
    set
        FK_CLASSIFICACAO_FISCAL=?,
        CODIGO=?,
        CST_COFINS=?,
        ... o resto do update

delete 
    from
        PRODUTOS_X_GRUPOS 
    where
        ID_PRODUTO=?

Tem como fazer update em uma entidade com relacionamento @ManyToMany sem esses deletes?
Eu não to muito afim de ir no banco e toda hora pegar todos os grupos dos produtos.

3 Respostas

K

Estou com o mesmo problema e não consigo achar a solucao.

Guilherme_Gomes

O seu many-to-many não seria entre produto e grupo, gerando algo do tipo?

Produto - Produto_Grupo - Grupo

Mas o que voce está fazendo é isso:

Produto - Produto_Produto_Grupo - Produto_Grupo - Grupo

Vc mapeou a relação many-to-many entre produto e produto_X_grupo, quando ela deve ser entre produto e grupo. Dessa maneira, vc nem precisa criar a entidade ProdutoGrupo no java.
O seu Set deveria ser de grupo.

E, outra coisa, se esse Set estiver vazio ou nulo, o Hibernate vai apagar tudo do banco dessa relação pq vc mapeou que a relação e falou que não tem nenhuma ligação! Logo, ele tira qualquer relação existente.

K

o problema e o mesmo mais no meu caso eu tenho uma associacao 1:n entre Questionario X itens
e N:N entre Questionario X CLIENTES e N:X entre Questionario X TECNICOS.
quando eu atualizo um questionario e deleta todas as associacoes N:N que aquele questionario tem

Criado 15 de fevereiro de 2011
Ultima resposta 10 de mar. de 2011
Respostas 3
Participantes 3