Problemas de exclusão com tabelas relacionadas

8 respostas
D

tenho uma entidade fabricante e uma entidade modelo sendo que um fabricante contem muitos modelos e um modelo contem um fabricante estou com um problema na hora de remover o modelo do banco por causa do relacionamento e quando uso o cascadeType.ALL ou o cascadeType.REMOVE ele remove o fabricante tbm mais só quero remover o modelo
estou colocando aqui em baixo as minha entidades.

package br.com.pi.quiosque.entity;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

@Entity
@Table(name = "modelos")
public class Modelo extends AbstractEntity{
	private static final long serialVersionUID = -1073678075989799547L;
	
	private String descricao;
	private String anoModelo;
	private String preco;
	private Fabricante fabricante;
	private List<Foto> fotos;
	private List<Acessorio> acessorios;
	
	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public String getAnoModelo() {
		return anoModelo;
	}

	public void setAnoModelo(String anoModelo) {
		this.anoModelo = anoModelo;
	}
	
	public String getPreco() {
		return preco;
	}
	public void setPreco(String preco) {
		this.preco = preco;
	}

	@ManyToMany
	@LazyCollection(LazyCollectionOption.FALSE)
	@JoinTable(name = "modelo_acessorios", joinColumns = { @JoinColumn(name = "modelo_id") }, inverseJoinColumns = { @JoinColumn(name = "acessorio_id") })
	public List<Acessorio> getAcessorios() {
		return acessorios;
	}
	public void setAcessorios(List<Acessorio> acessorios) {
		this.acessorios = acessorios;
	}
	
	@OneToMany(cascade=CascadeType.ALL)
	@LazyCollection(LazyCollectionOption.FALSE)
	@JoinTable(name = "modelo_fotos", joinColumns = {@JoinColumn(name = "modelo_id")}, inverseJoinColumns = {@JoinColumn(name = "foto_id")})
	public List<Foto> getFotos() {
		return fotos;
	}
	public void setFotos(List<Foto> fotos) {
		this.fotos = fotos;
	}

	@ManyToOne
	public Fabricante getFabricante() {
		return fabricante;
	}

	public void setFabricante(Fabricante fabricante) {
		this.fabricante = fabricante;
	}
}

entidade fabricante

package br.com.pi.quiosque.entity;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
@Entity
@Table(name="fabricantes")
public class Fabricante extends AbstractEntity{


	private static final long serialVersionUID = 7388632752625103216L;

	private String nome;
	private String foto;
	private List<Modelo> modelos;
	
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getFoto() {
		return foto;
	}
	public void setFoto(String foto) {
		this.foto = foto;
	}
	
	@OneToMany(cascade=CascadeType.REMOVE)
	@LazyCollection(LazyCollectionOption.FALSE)
	@JoinTable(name = "fabricante_modelos", joinColumns = {@JoinColumn(name = "fabricante_id")}, inverseJoinColumns = {@JoinColumn(name = "modelo_id")})
	public List<Modelo> getModelos() {
		return modelos;
	}
	public void setModelos(List<Modelo> modelos) {
		this.modelos = modelos;
	}
}

desde ja eu agradeço a ajuda.

8 Respostas

Hebert_Coelho

E por que você simplesmente não retira o cascade? O.o

D

então o cascade do fabricante esta certo porque quando eu excluir um fabricante tenho que excluir tambem todos os modelos e se eu retirar este cascade não funciona o meu problema é para excluir o modelo que eu não posso excluir o fabricante junto.

Hebert_Coelho

daniel.texucla:
então o cascade do fabricante esta certo porque quando eu excluir um fabricante tenho que excluir tambem todos os modelos e se eu retirar este cascade não funciona o meu problema é para excluir o modelo que eu não posso excluir o fabricante junto.
Eu afirmo para você então que tem um cascade que você pode retirar…

D

Qual?

Hebert_Coelho

daniel.texucla:
Qual?
Qual você já tentou tirar? E qual você não tirou ainda?

D

ja tentei o dos dois inclusive esse que eu postei esta até sem na entidade modelo, e se eu tiro o cascade da entidade fabricante eu não consigo excluir fabricante da erro tbm

Hebert_Coelho

daniel.texucla:
ja tentei o dos dois inclusive esse que eu postei esta até sem na entidade modelo, e se eu tiro o cascade da entidade fabricante eu não consigo excluir fabricante da erro tbm
Não me entenda errado mas… para você, como funciona o cascade?

D

Conssegui resolver cara obrigado pela ajuda.

segue a solução…

Essa é a entidade modelo

@ManyToOne
@JoinColumn(name="fabricante_id")
@LazyCollection(LazyCollectionOption.FALSE)
public Fabricante getFabricante(){
return fabricante;
}

essa é a entidade fabricante

@OneToMany(cascade=CascadeType.ALL, mappedBy="fabricante")
public List<Modelo> getModelos(){
return modelos;

vlw…

Criado 27 de setembro de 2012
Ultima resposta 28 de set. de 2012
Respostas 8
Participantes 2