tudo bom pessoal
tenho um bean de entidade Colaborador, e este, possiu outro Colaborador pai dentro dele, formando assim um auto relacionamento
esse auto relacionamento serve pra eu saber qual eh o pai da colaborador selecionado
fiz este exemplo soh pra testar a arvore do richfaces soh q durante o meu CRUD percebi algo estranho
por exemplo
quando eu edito e salvo o Colaborador 11, passando o Colaborador 4 como o pai, as vezes o Hibernate parece q troca os objetos e salva diferente
ele salva o Colaborador 11 com o pai 11 (isso eh… ele mesmo)… e ainda por cima vai no 4 e salva ele mesmo como pai (pai 4 tb)
meu bean de entidade estah correto?
oq pode estar acontecendo?
package br.com.facul.cadastro.model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
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.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import br.com.facul.cadastro.config.SystemConstants;
@Entity
@Table(name = "COLABORADOR", schema = SystemConstants.DATABASE_SCHEMA)
public class Colaborador implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private Colaborador colaboradorParent;
private EstadoCivil estadoCivil;
private Escolaridade escolaridade;
private String codigo;
private String nome;
private String rg;
private String cpf;
private Date dataNascimento;
private String sexo;
private String nomePai;
private String nomeMae;
private Date dataHoraEntradaSistema;
private List<Colaborador> subordinados = new ArrayList<Colaborador>();
private List<ColaboradorEmail> emails = new ArrayList<ColaboradorEmail>();
private List<ColaboradorTelefone> telefones = new ArrayList<ColaboradorTelefone>();
private List<ColaboradorEndereco> enderecos = new ArrayList<ColaboradorEndereco>();
public Colaborador() {
}
public Colaborador(Colaborador aColaboradorParent, EstadoCivil aEstadoCivil, Escolaridade aEscolaridade,
String aCodigo, String aNome, String aRg, String aCpf,
Date aDataNascimento, String aSexo, String aNomePai, String aNomeMae,
Date aDataHoraEntradaSistema, List<Colaborador> aSubordinados, List<ColaboradorEmail> aEmails, List<ColaboradorTelefone> aTelefones,
List<ColaboradorEndereco> aEnderecos) {
colaboradorParent = aColaboradorParent;
estadoCivil = aEstadoCivil;
escolaridade = aEscolaridade;
codigo = aCodigo;
nome = aNome;
rg = aRg;
cpf = aCpf;
dataNascimento = aDataNascimento;
sexo = aSexo;
nomePai = aNomePai;
nomeMae = aNomeMae;
dataHoraEntradaSistema = aDataHoraEntradaSistema;
subordinados = aSubordinados;
emails = aEmails;
telefones = aTelefones;
enderecos = aEnderecos;
}
@Id
@GeneratedValue
@Column(name = "ID")
public Long getId() {
return id;
}
public void setId(Long aId) {
id = aId;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ID_COLABORADOR_PARENT")
public Colaborador getColaboradorParent() {
return colaboradorParent;
}
public void setColaboradorParent(Colaborador aColaboradorParent) {
colaboradorParent = aColaboradorParent;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ID_ESTADO_CIVIL")
public EstadoCivil getEstadoCivil() {
return estadoCivil;
}
public void setEstadoCivil(EstadoCivil aEstadoCivil) {
estadoCivil = aEstadoCivil;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ID_ESCOLARIDADE")
public Escolaridade getEscolaridade() {
return escolaridade;
}
public void setEscolaridade(Escolaridade aEscolaridade) {
escolaridade = aEscolaridade;
}
@Column(name = "CODIGO", length = 10)
public String getCodigo() {
return codigo;
}
public void setCodigo(String aCodigo) {
codigo = aCodigo;
}
@Column(name = "NOME", length = 50)
public String getNome() {
return nome;
}
public void setNome(String aNome) {
nome = aNome;
}
@Column(name = "RG", length = 20)
public String getRg() {
return rg;
}
public void setRg(String aRg) {
rg = aRg;
}
@Column(name = "CPF", length = 11)
public String getCpf() {
return cpf;
}
public void setCpf(String aCpf) {
cpf = aCpf;
}
@Column(name = "DATA_NASCIMENTO")
public Date getDataNascimento() {
return dataNascimento;
}
public void setDataNascimento(Date aDataNascimento) {
dataNascimento = aDataNascimento;
}
@Column(name = "SEXO", length = 1)
public String getSexo() {
return sexo;
}
public void setSexo(String aSexo) {
sexo = aSexo;
}
@Column(name = "NOME_PAI", length = 80)
public String getNomePai() {
return nomePai;
}
public void setNomePai(String aNomePai) {
nomePai = aNomePai;
}
@Column(name = "NOME_MAE", length = 80)
public String getNomeMae() {
return nomeMae;
}
public void setNomeMae(String aNomeMae) {
nomeMae = aNomeMae;
}
@Column(name = "DATA_HORA_ENTRADA_SISTEMA")
public Date getDataHoraEntradaSistema() {
return dataHoraEntradaSistema;
}
public void setDataHoraEntradaSistema(Date aDataHoraEntradaSistema) {
dataHoraEntradaSistema = aDataHoraEntradaSistema;
}
@OneToMany(mappedBy = "colaboradorParent", fetch = FetchType.LAZY)
public List<Colaborador> getSubordinados() {
return subordinados;
}
public void setSubordinados(List<Colaborador> aSubordinados) {
subordinados = aSubordinados;
}
@OneToMany(mappedBy = "colaborador", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
public List<ColaboradorEmail> getEmails() {
return emails;
}
public void setEmails(List<ColaboradorEmail> aEmails) {
emails = aEmails;
}
@OneToMany(mappedBy = "colaborador", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
public List<ColaboradorTelefone> getTelefones() {
return telefones;
}
public void setTelefones(List<ColaboradorTelefone> aTelefones) {
telefones = aTelefones;
}
@OneToMany(mappedBy = "colaborador", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
public List<ColaboradorEndereco> getEnderecos() {
return enderecos;
}
public void setEnderecos(List<ColaboradorEndereco> aEnderecos) {
enderecos = aEnderecos;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Colaborador other = (Colaborador) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}
)