Hibernate não grava no banco

4 respostas
F

Eu estou fazendo um projeto com eclipse, hibernate e bd mysql. Não dá erros de compilação, entretanto não grava no banco de dados. Eu percebi que no log a opção autocommit = false. Eis o código:

public class Teste {
 	public static void main(String[] args) 
 	{
 		Session sessao = HibernateUtility.getSession(); 		
 		Transaction transaction = sessao.beginTransaction(); 		
 		Curso curso = new Curso(); 
 		curso.setNome("Desenvolvimento de Software"); 
 		curso.setDescricao("Curso só pra programadores");
 		
 		sessao.save(curso); 
 		sessao.flush();
 		transaction.commit();
 		sessao.close(); 
 	}
 }

aqui o log:

21:44:16,500  INFO C3P0ConnectionProvider:50 - C3P0 using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost/hibernate?autoReconnect=true
 21:44:16,500  INFO C3P0ConnectionProvider:51 - Connection properties: {user=root, password=****}
 21:44:16,500  INFO C3P0ConnectionProvider:54 - autocommit mode: false

Alguém tem idéia do que pode ser?

4 Respostas

F

Por favor se alguém souber me dá um help, eu já olhei várias coisas tem o commit para efetuar a transação e ainda não grava no banco.

furutani

E erros de execução?
Não tem nenhum try…catch nesse codigo.

herbertins

cara pq tu ta usando transaction, nesse caso vc poderia usar simplesmente uma session

public class Teste {
  	public static void main(String[] args) 
  	{
  		Session session = HibernateUtility.getSession(); 		
  		session.openSession();
		
  		Curso curso = new Curso(); 
  		curso.setNome("Desenvolvimento de Software"); 
  		curso.setDescricao("Curso só pra programadores");
  		
  		session.save(curso); 
                                session.connection.commit();
  		sessao.close(); 
  	}
  }

ve se isso funciona, eh o que eu uso

casmeiron

Amigo, seu código ficou um pouco confuso.

Se você olhar na documentação do hibernate [ http://www.hibernate.org/42.html ], utilizando Transaction com JDBC, se você abrir a sessão na mão (assim como você fez no seu código), você só precisa gerenciar o session.close( ).

// codigo tirado da documentação do hibernate
Session session = factory.openSession();
Transaction tx = null;
try {
    tx = session.beginTransaction();

    // Do some work
    session.load(...);
    session.persist(...);

    tx.commit(); // Flush happens automatically
}
catch (RuntimeException e) {
    tx.rollback();
    throw e; // or display error message
}
finally {
    session.close();
}

Uma outra abordagem é você usar a sessão corrente, invocando factory.getCurrentSession( ), assim você não precisa gerenciar flush, close etc…

Se você utiliza o log4j, ligue o DEBUG para as classes do hibernate:

log4j.logger.org.hibernate=DEBUG
log4j.logger.net.sf=DEBUG

Talvez isso possa te ajudar a descobrir o que está acontecendo.

** EDIT **
Ah, quase ia esquecendo, verifique a configuração do hibernate, essas 2 propriedades habilitam o thread-bound.

To enable the thread-bound strategy in your Hibernate configuration:

    * set hibernate.transaction.factory_class to org.hibernate.transaction.JDBCTransactionFactory
    * set hibernate.current_session_context_class to thread

Espero ter ajudado, flwz.

Criado 4 de janeiro de 2007
Ultima resposta 31 de jan. de 2007
Respostas 4
Participantes 4