Auto-Relacionamento no Hibernate

4 respostas
I

Fala Pessoal,
Tenho uma situação de auto-relacionamento no meu banco de dados com a tabela Processo. Quando criei as classes de entidade (usando netbeans 6.5) ele gerou o seguinte código na classe Processo:

@OneToMany (mappedBy = "codProcessoAnexo")
    private List<Processo> processoCollection;
    
    @ManyToOne
    @JoinColumn(name = "codProcessoAnexo", referencedColumnName = "codProcesso")
    private Processo codProcessoAnexo;

Na minha aplicação eu crio um collection e coloco nele todos os Processos anexos de um determinado processo…e depois salvo o Objeto. Ele salva todos os dados deste objeto , menos os anexos representados pela collection.

o que pode ser?
Desde já agradeço
Igor P. Simoes

4 Respostas

mario.fts

tem que dar o cascade.

http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-cascade

I

Não funcionou…o código ficou assim:

@OneToMany (mappedBy = "codProcessoAnexo", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE,
     org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
    private List<Processo> processoCollection;
    
    @ManyToOne
    @JoinColumn(name = "codProcessoAnexo", referencedColumnName = "codProcesso")
    private Processo codProcessoAnexo;
mario.fts

posta seu código da parte que faz a persistencia

I

Camada de Aplicação:

this.getController().getProcesso().setCodProcesso(cod);
this.getController().getProcesso().setNCaixa(Integer.parseInt(txtCaixa.getText()));
this.getController().getProcesso().setAssunto(this.txtDesc.getText());
...

this.getController().salvar()

Controller :

public boolean salvar() {
        if (validar() == false) {
            getGerenciador().criar(getProcesso());
            return true;
        }
        return false;

    }

Camada de Serviços:

public void criar(T t) {

        try {
            getFactory().iniciaTransacao();
            getDao().create(t);
            getFactory().confirma();
            MsgsUtils.addGlobalMessage("O novo registro foi incluído com sucesso!");
        } catch (Exception e) {
            getFactory().aborta();
            MsgsUtils.addGlobalMessage("Alguma exceção ocorreu, o registro não pôde ser incluído: "+e.getMessage());
            e.printStackTrace();
        }
    }

Inicia a Transação…

public void iniciaTransacao(){
        HibernateUtil.iniciaTransacao();
    }

public static void iniciaTransacao() {
        openSession();
        beginTransaction();
    }
 public static void openSession() {
        try {
            if (sessao.get() == null){
                sessao.set(getSessionFactory().openSession());
            }
        }
        catch (Throwable e) {
            e.printStackTrace();
        }
    }

    


    private static void beginTransaction() {
        try {
            if (sessao.get()!= null && transacao.get() == null)
                transacao.set(getSessao().beginTransaction());
        }
        catch (Throwable e) {
            e.printStackTrace();
        }
    }

Persiste o Objeto…

public void create(T t) {
        getSession().clear();
        getSession().save(t);
    }
Criado 10 de novembro de 2009
Ultima resposta 12 de nov. de 2009
Respostas 4
Participantes 2