Tenho duas tabelas mantendo um relacionamento N:N no meu banco de dados, são elas: CARROS e OPCIONAIS.
A tabela que auxilia o relacionamento eu chamo de CARROS_OPCIONAIS.
CARROS:
CREATE TABLE carros
(
id int4 NOT NULL DEFAULT nextval('seq_carro'::regclass),
nome varchar(50),
CONSTRAINT carros_pkey PRIMARY KEY (id)
)
OPCIONAIS
CREATE TABLE opcional
(
id int4 NOT NULL DEFAULT nextval('seq_opcional'::regclass),
nome varchar(50),
CONSTRAINT opcional_pkey PRIMARY KEY (id)
)
A tabela que faz a associação entre as duas é:
CARROS_OPCIONAIS
CREATE TABLE carros_opcionais
(
idcarro int4,
idopcional int4,
CONSTRAINT carros_opcionais_idcarro_fkey FOREIGN KEY (idcarro)
REFERENCES carros (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT carros_opcionais_idopcional_fkey FOREIGN KEY (idopcional)
REFERENCES opcionais (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
Tudo mapeado certinho com o Hibernate 3.2.
Gostaria de saber qual a melhor forma de apagar um objeto da classe Carro, sem contudo, apagar os objetos da classe Opcional? Uma vez que, se eu configurar o mapeamento como cascade=“all” ou coisa parecida, quando eu apago o Carro ele deleta os Opcionais do banco de dados também.
Infelizmente acho que ele não apaga so a associação.
Nesse caso vc teria que mapear a tabela associativa, apagar as associacoes e depois apagar o objeto desejado.
[quote=passos]Infelizmente acho que ele não apaga so a associação.
Nesse caso vc teria que mapear a tabela associativa, apagar as associacoes e depois apagar o objeto
desejado.[/quote]
Xiii, que inhânha!!!
Será que não tem alguma maneira de contornar isso?
Andei lendo a documentação e percebi que eles recomendam não abusar demais os mapeamentos. Eles até sugerem que se use dois mapeamentos one-to-many e many-to-one ao invés de um many-to-many.
Se alguém tiver alguma sugestão, por favor, poste-a aqui!
Obrigado!
Sei que essa pergunta já foi feita a muito tempo, mas só para deixar claro para quem ainda lê este post: como se trata de um relacionamento bi-direcional, você tem que apagar a referência de ambos os lados. Exemplo: