(Hibernate) Ao Excluir Registro Pai excluir os registros filhos

10 respostas
R

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…

10 Respostas

P

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

R

Mas n tem essa opção no Annotation…

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

Mas n deu certo…

R

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

R

Por favora alguem me ajude :cry:

R

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

Guilherme_Gomes

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!

R

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

sapulha

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.

rodrigo_corinthians

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.

R

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

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;
	}
	
	
	
}
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();
	}
	


	
	
}
Criado 1 de dezembro de 2007
Ultima resposta 15 de dez. de 2007
Respostas 10
Participantes 5