(Hibernate) Ao Excluir Registro Pai excluir os registros filhos

Já configurei de tudo mas quando estou excluindo o registro pai que eh a Permissao o registro funcionário n exclue…

Tenho essas classes:

Funcionario:

package com.experience.softwares.sgsc.model;



import java.util.Collection;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
public class Funcionario {
	
	@Id 
	@GeneratedValue
	private int Cod;
	@Column(length=60)
	private String Nome;  
	@Column(length=30)
	private String Endereco;
	@Column(length=30)
	private String Bairro;  
	@Column(length=30)
	private String Cidade;
	@Column(length=2)
	private String UF;
	@Column(length=20)
	private String CEP;
	@Column(length=13)
	private String Fone;
	@Column(length=60)
	private String Email;
	@Column(length=30)
	private String CPF;
	@Column(length=20)
	private String RG;
	@Temporal(TemporalType.DATE)
	private Date DtaNascimento;
	@Temporal(TemporalType.DATE)
	private Date DtaAdmissao;
	@Column(length=50)
	private String Cargo;
	@Column(length=25)
	private String Login;
	@Column(length=20)
	private String Senha;
	
	
	@ManyToOne(fetch = FetchType.EAGER)
	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.ALL)
	private Permissao Permissao; //Métodos getters e setters
	
	@OneToMany(mappedBy="Funcionario", fetch = FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private Collection<Venda> vendas;
	
	public Collection<Venda> getVendas() {
		return vendas;
	}
	public void setVendas(Collection<Venda> vendas) {
		this.vendas = vendas;
	}
	public String getBairro() {
		return Bairro;
	}
	public void setBairro(String bairro) {
		Bairro = bairro;
	}
	public String getCargo() {
		return Cargo;
	}
	public void setCargo(String cargo) {
		Cargo = cargo;
	}
	public String getCEP() {
		return CEP;
	}
	public void setCEP(String cep) {
		CEP = cep;
	}
	public String getCidade() {
		return Cidade;
	}
	public void setCidade(String cidade) {
		Cidade = cidade;
	}
	public int getCod() {
		return Cod;
	}
	public void setCod(int cod) {
		Cod = cod;
	}
	public String getCPF() {
		return CPF;
	}
	public void setCPF(String cpf) {
		CPF = cpf;
	}

	public String getEmail() {
		return Email;
	}
	public void setEmail(String email) {
		Email = email;
	}
	public String getEndereco() {
		return Endereco;
	}
	public void setEndereco(String endereco) {
		Endereco = endereco;
	}
	public String getFone() {
		return Fone;
	}
	public void setFone(String fone) {
		Fone = fone;
	}
	public String getLogin() {
		return Login;
	}
	public void setLogin(String login) {
		Login = login;
	}
	public String getNome() {
		return Nome;
	}
	public void setNome(String nome) {
		Nome = nome;
	}

	public String getRG() {
		return RG;
	}
	public void setRG(String rg) {
		RG = rg;
	}
	public String getSenha() {
		return Senha;
	}
	public void setSenha(String senha) {
		Senha = senha;
	}
	public String getUF() {
		return UF;
	}
	public void setUF(String uf) {
		UF = uf;
	}
	public Permissao getPermissao() {
		return Permissao;
	}
	public void setPermissao(Permissao permissao) {
		Permissao = permissao;
	}
	public Date getDtaAdmissao() {
		return DtaAdmissao;
	}
	public void setDtaAdmissao(Date dtaAdmissao) {
		DtaAdmissao = dtaAdmissao;
	}
	public Date getDtaNascimento() {
		return DtaNascimento;
	}
	public void setDtaNascimento(Date dtaNascimento) {
		DtaNascimento = dtaNascimento;
	}

}

Permissao

package com.experience.softwares.sgsc.model;

import java.util.Collection;


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;


import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;


@Entity
public class Permissao {
	
	@Id 
	@GeneratedValue
	private int Cod;
	@Column(length=30)
	private String Nome; 
	private Boolean Clientes;
	private Boolean Funcionarios;
	private Boolean Fornecedores;
	private Boolean Pecas;
	private Boolean Carros;
	private Boolean Relatorios;
	private Boolean Tabelas;
	private Boolean Financeiro;
	private Boolean Backup;
	private Boolean Configuracoes;
	private Boolean Acesso;
	private Boolean OrcamentoVendas;
	@OneToMany(mappedBy="Permissao", fetch = FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private Collection<Funcionario> funcionarios;
	
	
	public Permissao( String nome, Boolean clientes, Boolean funcionarios, Boolean fornecedores, Boolean pecas, Boolean carros, Boolean relatorios, Boolean tabelas, Boolean financeiro, Boolean backup, Boolean configuracoes, Boolean acesso, Boolean orcamentoVendas) {

		Nome = nome;
		Clientes = clientes;
		Funcionarios = funcionarios;
		Fornecedores = fornecedores;
		Pecas = pecas;
		Carros = carros;
		Relatorios = relatorios;
		Tabelas = tabelas;
		Financeiro = financeiro;
		Backup = backup;
		Configuracoes = configuracoes;
		Acesso = acesso;
		OrcamentoVendas = orcamentoVendas;
	}
	
	public Permissao() {
		super();
	}
	public Boolean getAcesso() {
		return Acesso;
	}
	public void setAcesso(Boolean acesso) {
		Acesso = acesso;
	}
	public Boolean getBackup() {
		return Backup;
	}
	public void setBackup(Boolean backup) {
		Backup = backup;
	}
	public Boolean getCarros() {
		return Carros;
	}
	public void setCarros(Boolean carros) {
		Carros = carros;
	}
	public Boolean getClientes() {
		return Clientes;
	}
	public void setClientes(Boolean clientes) {
		Clientes = clientes;
	}
	public int getCod() {
		return Cod;
	}
	public void setCod(int cod) {
		Cod = cod;
	}
	public Boolean getConfiguracoes() {
		return Configuracoes;
	}
	public void setConfiguracoes(Boolean configuracoes) {
		Configuracoes = configuracoes;
	}
	public Boolean getFinanceiro() {
		return Financeiro;
	}
	public void setFinanceiro(Boolean financeiro) {
		Financeiro = financeiro;
	}
	public Boolean getFornecedores() {
		return Fornecedores;
	}
	public void setFornecedores(Boolean fornecedores) {
		Fornecedores = fornecedores;
	}
	public Boolean getFuncionarios() {
		return Funcionarios;
	}
	public void setFuncionarios(Boolean funcionarios) {
		Funcionarios = funcionarios;
	}
	public String getNome() {
		return Nome;
	}
	public void setNome(String nome) {
		Nome = nome;
	}
	public Boolean getOrcamentoVendas() {
		return OrcamentoVendas;
	}
	public void setOrcamentoVendas(Boolean orcamentoVendas) {
		OrcamentoVendas = orcamentoVendas;
	}
	public Boolean getPecas() {
		return Pecas;
	}
	public void setPecas(Boolean pecas) {
		Pecas = pecas;
	}
	public Boolean getRelatorios() {
		return Relatorios;
	}
	public void setRelatorios(Boolean relatorios) {
		Relatorios = relatorios;
	}
	public Boolean getTabelas() {
		return Tabelas;
	}
	public void setTabelas(Boolean tabelas) {
		Tabelas = tabelas;
	}
	public void setFuncionarios(Collection<Funcionario> funcionarios) {
		this.funcionarios = funcionarios;
	}
	
	public Collection<Funcionario> getFUncionarios() {
		return funcionarios;
	}

}

:idea:
Desde já…Obrigado…

No mapeamento do conjunto de “filhos” no “pai”, você deve usar “cascade=all-delete-orphan”.

Mas n tem essa opção no Annotation…

Já usei o:
@Cascade(CascadeType.DELETE_ORPHAN)

Mas n deu certo…

Já Tentei de tudo…alguem tem alguma solução?

Por favora alguem me ajude :cry:

Galera da uma ajuda ai…
Posta alguem um exemplo de ANnotation no Hibernate com Cascade q deleta os registros filhos

Não depende somente da annotation, voce tem que criar a tabela usando essa opção, aproveita e da uma olhada na engine da sua tabela e veja como ela trabalha com o cascade!

Tô usando o MySQL e to criando ela pelo SchemaExport…deveria criar sozinho não?

Cara, faz um temp que não uso Hibernate, mais se não me engano tem algo a haver com a estratégia entre o pai e filho que você tá utilizando.

Acho que tem uma anotation onde você define qual a estratégia entre as tabelas, e daí funciona o cascade.

Dá uma olhada na documentação que lá fala, é que eu tô sem ela aqui.

Abraços.

Na classe Funcionario use as seguintes annotations.

@OneToMany @JoinColumn(name = "id_permissao", referencedColumnName = "id") private Permissao Permissao; Onde id_permissao é o nome da coluna fk da tabela funcionário e id é o nome da pk da tabela permissão.

Agora na classe Permissao as seguintes annotations.

@OneToMany(cascade = CascadeType.REMOVE, fetch = FetchType.EAGER, mappedBy = "Permissao") private Collection<Funcionario> funcionarios; Agora tenta deletar o objeto Permissao isto já deve resolver o seu problema, testa e depois volta pra falar se funcionou ou não.

Fiz como vc mandou…mas não deu certo…

[code]package com.experience.softwares.sgsc.model;

import java.util.Collection;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class Funcionario {

@Id 
@GeneratedValue
private int cod;
@Column(length=60)
private String nome;  
@Column(length=30)
private String endereco;
@Column(length=30)
private String bairro;  
@Column(length=30)
private String cidade;
@Column(length=2)
private String uf;
@Column(length=20)
private String cep;
@Column(length=13)
private String fone;
@Column(length=60)
private String email;
@Column(length=30)
private String cpf;
@Column(length=20)
private String rg;
@Temporal(TemporalType.DATE)
private Date dtaNascimento;
@Temporal(TemporalType.DATE)
private Date dtaAdmissao;
@Column(length=50)
private String cargo;
@Column(length=25)
private String login;
@Column(length=20 )
private String senha;


@ManyToOne
@JoinColumn(name = "permissao_cod", referencedColumnName = "cod")  
private Permissao permissao; 

@OneToMany(mappedBy="funcionario", fetch = FetchType.LAZY)
private Collection<Venda> vendas;

public Collection<Venda> getVendas() {
	return vendas;
}
public void setVendas(Collection<Venda> vendas) {
	this.vendas = vendas;
}
public String getBairro() {
	return bairro;
}
public void setBairro(String bairro) {
	this.bairro = bairro;
}
public String getCargo() {
	return cargo;
}
public void setCargo(String cargo) {
	this.cargo = cargo;
}
public String getCep() {
	return cep;
}
public void setCep(String cep) {
	this.cep = cep;
}
public String getCidade() {
	return cidade;
}
public void setCidade(String cidade) {
	this.cidade = cidade;
}
public int getCod() {
	return cod;
}
public void setCod(int cod) {
	this.cod = cod;
}
public String getCpf() {
	return cpf;
}
public void setCpf(String cpf) {
	this.cpf = cpf;
}
public Date getDtaAdmissao() {
	return dtaAdmissao;
}
public void setDtaAdmissao(Date dtaAdmissao) {
	this.dtaAdmissao = dtaAdmissao;
}
public Date getDtaNascimento() {
	return dtaNascimento;
}
public void setDtaNascimento(Date dtaNascimento) {
	this.dtaNascimento = dtaNascimento;
}
public String getEmail() {
	return email;
}
public void setEmail(String email) {
	this.email = email;
}
public String getEndereco() {
	return endereco;
}
public void setEndereco(String endereco) {
	this.endereco = endereco;
}
public String getFone() {
	return fone;
}
public void setFone(String fone) {
	this.fone = fone;
}
public String getLogin() {
	return login;
}
public void setLogin(String login) {
	this.login = login;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}
public Permissao getPermissao() {
	return permissao;
}
public void setPermissao(Permissao permissao) {
	this.permissao = permissao;
}
public String getRg() {
	return rg;
}
public void setRg(String rg) {
	this.rg = rg;
}
public String getSenha() {
	return senha;
}
public void setSenha(String senha) {
	this.senha = senha;
}
public String getUf() {
	return uf;
}
public void setUf(String uf) {
	this.uf = uf;
}

}
[/code]

package com.experience.softwares.sgsc.model;



import java.util.Collection;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;

import org.hibernate.annotations.OnDelete;


@Entity
@org.hibernate.annotations.Proxy(lazy = true)  
@OnDelete(action = org.hibernate.annotations.OnDeleteAction.CASCADE)  
public class Permissao {
	
	@Id 
	@GeneratedValue
	private int cod;
	@Column(length=30)
	private String nome; 
	private Boolean clientes;
	private Boolean funcionario;
	private Boolean fornecedores;
	private Boolean pecas;
	private Boolean carros;
	private Boolean relatorios;
	private Boolean tabelas;
	private Boolean financeiro;
	private Boolean backup;
	private Boolean configuracoes;
	private Boolean acesso;
	private Boolean orcamentoVendas;
	
	

	@OneToMany(cascade = CascadeType.REMOVE, fetch = FetchType.EAGER, mappedBy = "permissao")  
	private Collection<Funcionario> funcionarios;  
	
	
	
	public Permissao(String nome, Boolean clientes, Boolean funcionario, Boolean fornecedores, Boolean pecas, Boolean carros, Boolean relatorios, Boolean tabelas, Boolean financeiro, Boolean backup, Boolean configuracoes, Boolean acesso, Boolean orcamentoVendas) {

		this.nome = nome;
		this.clientes = clientes;
		this.funcionario = funcionario;
		this.fornecedores = fornecedores;
		this.pecas = pecas;
		this.carros = carros;
		this.relatorios = relatorios;
		this.tabelas = tabelas;
		this.financeiro = financeiro;
		this.backup = backup;
		this.configuracoes = configuracoes;
		this.acesso = acesso;
		this.orcamentoVendas = orcamentoVendas;

	}



	public Boolean getAcesso() {
		return acesso;
	}



	public void setAcesso(Boolean acesso) {
		this.acesso = acesso;
	}



	public Boolean getBackup() {
		return backup;
	}



	public void setBackup(Boolean backup) {
		this.backup = backup;
	}



	public Boolean getCarros() {
		return carros;
	}



	public void setCarros(Boolean carros) {
		this.carros = carros;
	}



	public Boolean getClientes() {
		return clientes;
	}



	public void setClientes(Boolean clientes) {
		this.clientes = clientes;
	}



	public int getCod() {
		return cod;
	}



	public void setCod(int cod) {
		this.cod = cod;
	}



	public Boolean getConfiguracoes() {
		return configuracoes;
	}



	public void setConfiguracoes(Boolean configuracoes) {
		this.configuracoes = configuracoes;
	}



	public Boolean getFinanceiro() {
		return financeiro;
	}



	public void setFinanceiro(Boolean financeiro) {
		this.financeiro = financeiro;
	}



	public Boolean getFornecedores() {
		return fornecedores;
	}



	public void setFornecedores(Boolean fornecedores) {
		this.fornecedores = fornecedores;
	}



	public Boolean getFuncionario() {
		return funcionario;
	}



	public void setFuncionario(Boolean funcionario) {
		this.funcionario = funcionario;
	}



	public Collection<Funcionario> getFuncionarios() {
		return funcionarios;
	}



	public void setFuncionarios(Collection<Funcionario> funcionarios) {
		this.funcionarios = funcionarios;
	}



	public String getNome() {
		return nome;
	}



	public void setNome(String nome) {
		this.nome = nome;
	}



	public Boolean getOrcamentoVendas() {
		return orcamentoVendas;
	}



	public void setOrcamentoVendas(Boolean orcamentoVendas) {
		this.orcamentoVendas = orcamentoVendas;
	}



	public Boolean getPecas() {
		return pecas;
	}



	public void setPecas(Boolean pecas) {
		this.pecas = pecas;
	}



	public Boolean getRelatorios() {
		return relatorios;
	}



	public void setRelatorios(Boolean relatorios) {
		this.relatorios = relatorios;
	}



	public Boolean getTabelas() {
		return tabelas;
	}



	public void setTabelas(Boolean tabelas) {
		this.tabelas = tabelas;
	}



	public Permissao() {
		super();
	}
	


	
	
}