Hibernate grava na sessão, mas não grava no banco

8 respostas
lelodois

Tenho uma aplicação coonfigurado o hibernate!!!

Fiz uma fábrica de criação de tabelas que recebe a classe como parametro!!!
Funciona normalmente, pois eu defino na classe as anotações!!!

Conforme a apostila do guj eu crieiii uma fábrica de sessão!!1
Tudo bonitinho funciona que é uma beleza, mas o mais importante nao funciona que é guardar no banco.

Quando vou buscar na sessao o id 55 existe mas o meu banco de dados esta em branco.

grato,
Lelo

8 Respostas

rodrigoallemand

E o commit?? Tá aonde?!?

B

vc precisa fazer um flush da seção pode ser session.flush() ou criar uma transação e fazer commit.

rodrigoallemand

O flush faz vc sincronizar o banco e a memória, fazendo com que o banco entenda que existe uma transação em execução com os determinados dados… só o commit com sucesso garante que vc gravou no banco…

lelodois

Coloquei o flush e fechei a session!!!
E no banco nao tem nada, o engraçado é que o banco está sincronizado com a minha aplicação por
que eu já consegui incluir os campos.
mas os registros eu nao estou conseguindo…
olhem o meu código!!!

valeuu

package hibernate;

import org.hibernate.Session;

public class GeraTabelas {

public static void main(String[] args) {

	HibernateFactory factory = new HibernateFactory();

	Session session = factory.getSession();

	Produto p = new Produto();
	p.setNome("Nome");
	p.setDescricao("desc");
	p.setPreco(100.50);

	session.save(p);
	session.flush();
	session.close();
	System.out.println("adicionad");
}

}

lelodois

e eu nao acho o comit…
nao tenho a opcção de session.comit()

ThiagoWorldCoder

vc pode estar usando o hibernate.jar errado!!!

rodrigoallemand

Erro meu, desculpe...
Vc nunca vai achar o session.commit() porque ele é da classe Transaction...

Veja esse HibernateSessionFactory... ele pode te ajudar...

public class HibernateSessionFactory {

	/**
	 * Construtor no-arg
	 * Protegido para evitar a criação da classe
	 */
	protected HibernateSessionFactory() {
		super();
	}

	/* Constante de caminho do arquivo de configuração do Hibernate */
    private static String DEFAULT_CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";

    /* Threads que controlarão a sessão e a transação */
	private static final ThreadLocal<Session> threadSession = new ThreadLocal<Session>();
	private static final ThreadLocal<Transaction> threadTransaction = new ThreadLocal<Transaction>();

	/* Variaveis do Hibernate */
    private static final Configuration cfg = new Configuration();
    private static SessionFactory sessionFactory;

    /**
     * Método que retorna a instancia da Sessão utilizando o arquivo default do hibernate (/hibernate.cfg.xml).
     * @return Session
     * @throws SessionFactoryException
     */
    public static Session getCurrentSession() throws HibernateException {
    	return HibernateSessionFactory.getCurrentSession(DEFAULT_CONFIG_FILE_LOCATION);
    }

    /**
     * Método que retorna a instancia da Sessão.
     * @return Session
     * @throws SessionFactoryException
     */
    public static Session getCurrentSession(String configFile) throws HibernateException {
        Session session = threadSession.get();

		try {
			if (session == null || !session.isOpen()) {
				if (sessionFactory == null) {
					try {
						cfg.configure(configFile);
						sessionFactory = cfg.buildSessionFactory();
					} catch (Exception e) {
						throw e;
					}
				}
				session = (sessionFactory != null) ? sessionFactory.openSession() : null;
				threadSession.set(session);
			}
		} catch (Exception e) {
			throw new HibernateException(e);
		}

        return session;
    }

    /**
     * Método que fecha a sessão do Hibernate.
     * @throws SessionFactoryException
     */
    public static void doCloseSession() throws HibernateException {
        Session session = threadSession.get();
        threadSession.set(null);

        try {
			if (session != null) {
			    session.close();
			}
		} catch (Exception e) {
			throw new HibernateException(e);
		}
    }

    /**
     * Método que inicia a transação do Hibernate.
     * @throws SessionFactoryException
     */
    public static void doBeginTransaction() throws HibernateException {
    	Transaction tx = threadTransaction.get();

    	try {
			if(tx == null){
				tx = getCurrentSession().beginTransaction();
				threadTransaction.set(tx);
			}
		} catch (Exception e) {
			throw new HibernateException(e);
		}
    }

    /**
     * Método que executa o rollback da transação.
     * @throws SessionFactoryException
     */
    public static void doRollback() throws HibernateException {
    	Transaction tx = threadTransaction.get();

    	try {
			if(tx != null && !tx.wasCommitted() && !tx.wasRolledBack()){
				tx.rollback();
				threadTransaction.set(null);
			}
		} catch (Exception e) {
			throw new HibernateException(e);
		}
    }

    /**
     * Método que commita a transação.
     * @throws SessionFactoryException
     */
    public static void doCommit() throws HibernateException {
    	Transaction tx = threadTransaction.get();

    	try {
			if(tx != null && !tx.wasCommitted() && !tx.wasRolledBack()){
				tx.commit();
				threadTransaction.set(null);
			}
		} catch (Exception e) {
			doRollback();
			throw new HibernateException(e);
		}
    }


}
lelodois

/BLzzz!!!
valeuuu funcionou!!!
abraços

Criado 29 de novembro de 2007
Ultima resposta 3 de dez. de 2007
Respostas 8
Participantes 4