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…
pango
Dezembro 1, 2007, 6:20pm
#2
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
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?
sapulha
Dezembro 11, 2007, 1:37pm
#9
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();
}
}