Hibernate não da erro e não grava nada

7 respostas
B

Olá pessoal se alguém puder dar uma força já estou a um bom tempo com esse problema, modifiquei o meu DAO mas não deu em nada, pois não gera erro, mas no meu servlet retorna que gravou corretamente.

Grato.

7 Respostas

B

[code]public class SetorDao implements Serializable {

private Session session;
//Transaction tx= null;
public Setor insert(Setor setor) {
Setor s = null;
try {
session = HibernateUtil.getFactory().getCurrentSession();
//session=HibernateUtil.getSession();
session.beginTransaction();
//tx=(Transaction) session.beginTransaction();
session.save(setor);
HibernateUtil.getFactory().getCurrentSession().getTransaction().commit();
//tx.commit();
//session.flush();
session.close();
s = setor;
} catch (Exception he) {
System.out.println(he);

}
return s;
}

B

esse é o meu HibernateUtil:

public class HibernateUtil {

private static SessionFactory factory;


static {
    try {
        factory = new AnnotationConfiguration().configure().buildSessionFactory();
       // factory.openSession();
       // System.out.println(factory.);
        System.out.println(factory.getCurrentSession());
    } catch (Exception e) {
        e.printStackTrace();
        factory = null;
    }
}

public static SessionFactory getFactory() {

    return factory;

}

public static Session getSession() {
    return factory.openSession();
}

}

yoshikichi
Boby:
public class SetorDao implements Serializable {

    private Session session;
    //Transaction tx= null;
    public Setor insert(Setor setor) {
        Setor s = null;
        try {
            session = HibernateUtil.getFactory().getCurrentSession();
            //session=HibernateUtil.getSession();
            session.beginTransaction();
            //tx=(Transaction) session.beginTransaction();
            session.save(setor);
            HibernateUtil.getFactory().getCurrentSession().getTransaction().commit();
            //tx.commit();
            //session.flush();
            session.close();
            s = setor;
        } catch (Exception he) {
            System.out.println(he);

        }
        return s;
    }

Seu commit() esta comentado.
Outra coisa, coloca entre as tag code o seu codigo

B

mesmo tirando não grava, esse foi a última tentativa que achei mas não tive sucesso.

T

Tente mudar:

System.out.println(he);

Para:

he.printStackTrace();

E veja se ajuda…

B

O problema é que não da erro, essa mudança já fiz.

T

Repare o seguinte, na implementação do seu HibernateUtil, você esta abrindo uma nova session a cada chamada p/ o método

public static Session getSession() { return factory.openSession(); }

Por tanto, quando faz o commit na linha a baixo não a nada a ser commitado pois trata-se de uma outra Session, mas não a erros também, por isso não tem nada no seu log

HibernateUtil.getFactory().getCurrentSession().getTransaction().commit();

Eu aconselho você copiar uma implementação de HibernateUtil que utilize ThreadLocal em primeiro lugar como essa

Mas só p/ comprovar o que lhe disse mude seu Dao p/ o seguinte:

public Setor insert(Setor setor) {  
         Setor s = null;  
         try {  
             session = HibernateUtil.getFactory().getCurrentSession();
             Transaction tx = session.beginTransaction();
             session.save(setor);
             tx.commit();  
             session.close();  
             s = setor;  
         } catch (Exception he) {  
             he.printStackTrace();   
         }  
         return s;  
     }

Good Luck!

Criado 23 de dezembro de 2008
Ultima resposta 24 de dez. de 2008
Respostas 7
Participantes 3