[RESOLVIDO] Hibernate: não chega no GenericDAO

Pessoal,

Na classe ProdutoDAO que extende de GenericDAO, o método salvarOuAtualizar é chamado mas de lá não passa. Vejamos como estão as classes:

[code]public class GenericDAO<T extends Serializable> {

private Session sessao;
private final Class&lt;T&gt; classePersistente;

public GenericDAO() {
    this.sessao = HibernateUtil.getSession();
    this.classePersistente = (Class&lt;T&gt;) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}

public Session getSessao() {
    return sessao;
}


protected void salvarOuAtualizar(T entity) {
System.out.println(“GenericDAO salvar/atualizar”);
try {
System.out.println(“GenericDAO try begin”);
this.sessao.beginTransaction().begin();
this.sessao.saveOrUpdate(entity);
System.out.println(“GenericDAO try antes do commit”);
this.sessao.getTransaction().commit();
System.out.println(“GenericDAO try depois do commit”);
} catch (Throwable t) {
System.out.println(“GenericDAO rollback”);
this.sessao.getTransaction().rollback();
t.printStackTrace();
} finally {
System.out.println(“GenericDAO antes de fechar sessao”);
fecharSessao();
}
}

public void fecharSessao() {
    System.out.println("fechando");
    if (this.sessao != null && this.sessao.isOpen()) {
        System.out.println("fechou");
        this.sessao.close();
    }else{
        System.out.println("nao fechou");
    }        
}

}[/code]

[code]public class ProdutoDAO extends GenericDAO<Produto> {

@Override
public void salvarOuAtualizar(Produto produto){
    System.out.println("Salvando/atualizando produto...");
    salvarOuAtualizar(produto);        
    System.out.println("Produto salvo/atualizado");
}


}
[/code]

public class ProdutoController { ... public void salvarOuAtualizar(Produto produto) throws SQLException { new ProdutoDAO().salvarOuAtualizar(produto); } ... }

A chamada do ProdutoController está nesta classe:

[code]public class Sincronismo_recebimento_produtos extends SwingWorker<DefaultTableModel, Object[]> {
private Session sessao;

// sessao = HibernateUtil.getSession();
// sessao.beginTransaction().begin();
ProdutoController pc = new ProdutoController();

for (int i = 0; i < qtdRegistros; i++) {

        this.modelo.setValueAt(&quot;Recebendo produto &quot;+ String.valueOf((i + 1) + &quot; de &quot; + qtdRegistros), linhas - 1, 2);

        Produto produto = new Produto();
        produto.setCod_produto_portal(resultProdutos.getSTRUCTPROD().get(i).getCCODPORTAL());
        produto.setCod_produto_sistema(resultProdutos.getSTRUCTPROD().get(i).getCCODSISTEMA());
        produto.setCodigo_barra_embalagem(resultProdutos.getSTRUCTPROD().get(i).getCCODBAREMB());
        produto.setCodigo_barra_unidade(resultProdutos.getSTRUCTPROD().get(i).getCCODBARUNIT());
        produto.setDescricao(resultProdutos.getSTRUCTPROD().get(i).getCDESCRICAO());
        produto.setDisponivel_venda(resultProdutos.getSTRUCTPROD().get(i).getCDISPVENDA());

// sessao.saveOrUpdate(produto);
pc.salvarOuAtualizar(produto);
}

// sessao.getTransaction().commit();
// sessao.close();

}
[/code]

Para vocês terem idéia, em Sincronismo_recebimento_produtos o trecho comentado funcionava beleza. Comentei ele para testar o ProdutoController e provar que está ocorrendo a gravação/atualização com sucesso.

No console surge repetidas vezes Salvando produto…, ponto no qual o aplicativo pára. Nem aparece no console a mensagem System.out.println("GenericDAO salvar/atualizar"); incluída no GenericDAO.

Onde deve estar o problema? Erro algum surge no console!

Você está sobrescrevendo o método salvarOuAtualizar na classe ProdutoDAO e chamando recursivamente o mesmo.

Assim não resolve?

super.salvarOuAtualizar(produto);

Obrigado dan20 e henriquejhc!

Renomeei os métodos na classe ProdutoDAO e resolveu o problema da recursividade!