Problema com fk

1 resposta
johmjohm

Ola galera,

Estou tendo o seguinte problema:

Tento apagar um dado, mas ele tem um fk ne outra classe.

Minhas classes sao estas:

@Entity
public class Pessoa {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "id_pessoa")
	private int idPessoa;

	private String nome;
	private String sobenome;

	private String cpf;
	private int idade;
	private int telefone;

	private String email;

	private String usuario;

	private String senha;

	public int getIdPessoa() {
		return idPessoa;
	}
//getters e setters aqui...
@Entity
public class Contatos {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int id;

	private String nome;
	@Column(length = 3)
	private int idade;
	private String email;
	private String telefone;
	private String celular;

	@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinColumn(name = "id_pessoa")
	private Pessoa pessoa;

	public int getId() {
		return id;
	}
//getters e setters aqui...

O que eu quero é que se eu apagar uma pessoa todos contatos com id dessa pessoa sejam apagados tambem!

Estou fazendo este mapeamento certo?

Desde já agreço pela ajuda!

1 Resposta

danilo.coppi

Bom, você tem 2 possibilidades para fazer isso.

1ª) Fazer um mapeamento relacional direto no banco de dados, ou seja, setar no FK da tabela contatos para que ela seja deletada quando uma pessoa for deletada.

ALTER TABLE database.contatos DROP FOREIGN KEY fk_contatos_pessoa;
ALTER TABLE database.contatos 
  ADD CONSTRAINT fk_contatos_pessoa
  FOREIGN KEY (id_pessoa)
  REFERENCES database.pessoa (idPessoa)
  ON DELETE CASCADE
  ON UPDATE CASCADE;

2ª) Adicionar o código abaixo na classe Pessoa para que você possa manipular os contatos manualmente.
Com esse codigo, a lista contatos virá com todos os contatos da pessoa, e ao dar um contatos.removeAll() e salvar o objeto Pessoa, todos os contatos serão apagados.

@OneToMany(mappedBy="pessoa",cascade={CascadeType.ALL}, orphanRemoval=true,fetch=FetchType.EAGER)
private List<Contatos> contatos;
Criado 1 de abril de 2011
Ultima resposta 7 de abr. de 2011
Respostas 1
Participantes 2