Hibernate - relacionamentos [Resolvido]

Boa Noite Galera.

Estou com um problema com mapeamento no hibernate.

É o seguinte tenho uma Classe Empresa.java onde essa empresa tem um relacionamento com ela mesma (Auto Relacionamento)

quando instancio um objeto empresa da erro de stackoverFlow

segue um pedaço da minha classe, acredito que seja problema no mapeamento.

Caso alguem tenha passado por esse problema e puder me ajudar agradeço

Té mais

[code]public class Empresa implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = “id”)
private Integer id;
@Column(name = “nome”)
private String nome;

@OneToMany(mappedBy = "idPai")
private List<Empresa> empresaList;

@JoinColumn(name = "id_pai", referencedColumnName = "id")
@ManyToOne(fetch=FetchType.LAZY)
private Empresa idPai;

.....[/code]

Opa, posta a classe inteira por favor!

Fala brow,

No construtor voce esta fazendo…

idPai = new Empresa();

??

Abraco!

Boa tarde

segue a classe completa

package modelo.entidade;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Basic;
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.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;


@Entity
@Table(name = "empresa")
    @SequenceGenerator(sequenceName = "empresa_id_seq", allocationSize = 1, initialValue = 0, name = "empresa_id_seq")
public class Empresa implements Serializable {
    @Id
    @GeneratedValue(generator = "empresa_id_seq")
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Column(name = "nome")
    private String nome;
    @Column(name = "cnpj")
    private String cnpj;
 
	@OneToMany(mappedBy = "idPai")
    private List<Empresa> empresaList;

    @JoinColumn(name = "id_pai", referencedColumnName = "id")
    @ManyToOne(cascade={CascadeType.PERSIST,CascadeType.REMOVE,CascadeType.MERGE},fetch=FetchType.LAZY)
    private Empresa idPai;

    public Empresa() {
        empresaList= new ArrayList<Empresa>();
        idPai = new Empresa();
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

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

    public String getCnpj() {
        return cnpj;
    }

    public void setCnpj(String cnpj) {
        this.cnpj = cnpj;
    }

    public List<Empresa> getEmpresaList() {
        return empresaList;
    }

    public void setEmpresaList(List<Empresa> empresaList) {
        this.empresaList = empresaList;
    }

    public Empresa getIdPai() {
        return idPai;
    }

    public void setIdPai(Empresa idPai) {
        this.idPai = idPai;
    }
    
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        if (!(object instanceof Empresa)) {
            return false;
        }
        Empresa other = (Empresa) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "modelo.entidade.Empresa[id=" + id + "]";
    }
}

Fala brow,

Acredito que seu problema esteja no construtor…
Mais precisamente onde ele faz idPai = new Empresa()
Esse new Empresa chama mais um, que chama mais um, e assim vai…

Abraco!

o Kenneth esta certo, tem um loop infinito no seu codigo ai…

Da forma que esta, acontece o seguinte:

Quando instanciar empresa, sera criado uma nova empresa, que criara uma nova empresa, que criara uma nova empresa…

Vc precisa mesmo instanciar o objeto e a lista no contrutor?
Vc poderia criar um metodo para instanciar os dois e chama-lo quando necessario!

EX:

public void instanciar(){
           empresaList= new ArrayList<Empresa>();  
           idPai = new Empresa();
}

e quando vc precisar instanciar os objetos eh soh chamar o metodo instanciar()

Entendeu?

Ok entendi,

Achei que tinha como fazer no mapeamento do hibernate uma espécie de (lazy load);

Mas não tem problema, vou utilizar a solução de criar um metodo para instanciar os objetos, sem ser no construtor.

Valeu pela ajuda galera…

Beleza brother…
So coloca [Resolvido] no titulo.

Abraco