HIBERNATE: persistencia com Session ou com Transaction?

Olá a todos

Em todos os tutoriais hibernate que eu encontrei, eles mostravam o acesso ao BD usando apenas métodos do objeto Session (session.save(objeto); session.flush(); session.close();).

Porém os dados nunca eram inseridos no meu exemplo. Quando eu iniciei um objeto Transaction e ao final coloquei um transaction.commit() inseriu certinho… o código ficou assim:

public void insert(Amigo amigo) throws Exception
	{
		
                Session session = factory.openSession();
		          Transaction tx = session.beginTransaction();
                session.save(amigo);
		          tx.commit();
                session.close();
       }

Alguém sabe o porque disso? Nos tutoriais e inclusive no livro Hibernate in Action diz que o objeto Transaction é opcional…

abraços

Muito provavelmente o que está acontecendo é que no seu caso, o auto commit está desligado no arquivo de configuração do Hibernate.

<property name=“auto_commit”>off</property>

Então, as alterações que você fazia não eram persistidas no banco porque vc não dava commit. Depois q vc passou a utilizar transação você commitou e os dados foram persistidos.

No caso dos exemplos que você viu, provavelmente o auto commit estava ligado…

Bom, eu não uso o hibernate.cfg.xml na minha aplicação, só o hibernate.properties, e não achei nada parecido com essa propriedade.

além desse arquivo, eu tenho o log4j.xml e o ehcache.xml

outra coisa, sem eu usar a transação, o comando Session.connection().commit() também não funcionou.

abracos