[RESOLVIDO] Hibernate: não chega no GenericDAO

3 respostas
V

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:

public class GenericDAO<T extends Serializable> {

    private Session sessao;
    private final Class<T> classePersistente;

    public GenericDAO() {
        this.sessao = HibernateUtil.getSession();
        this.classePersistente = (Class<T>) ((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");
        }        
    }
}
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");
    }
...
}
public class ProdutoController {
...
    public void salvarOuAtualizar(Produto produto) throws SQLException {
        new ProdutoDAO().salvarOuAtualizar(produto);
    }
...
}

A chamada do ProdutoController está nesta classe:

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("Recebendo produto "+ String.valueOf((i + 1) + " de " + 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();
...
}

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!

3 Respostas

D

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

H

Assim não resolve?

super.salvarOuAtualizar(produto);
V

Obrigado dan20 e henriquejhc!

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

Criado 16 de maio de 2013
Ultima resposta 16 de mai. de 2013
Respostas 3
Participantes 3