Hibernate não cria tabela!

Meu Hibernate simplesmente não tá funcionando!

To usando a seguinte classe de teste:

[code]package testes;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import entities.Produto;

public class TestaInsereProduto {

public static void main(String[] args) {
	EntityManagerFactory factory = Persistence
			.createEntityManagerFactory("lojavirtualdb");
	EntityManager em = factory.createEntityManager();

	Produto p = new Produto();
	p.setNome("camiseta");
	p.setPreco(12.23);

	em.getTransaction().begin();
	em.persist(p);
	em.getTransaction().commit();
}

}[/code]

O meu arquivo persistence.xml está dentro da pasta META-INF que está dentro da pasta src e é o seguinte:

<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"> <persistence-unit name="lojavirtualdb"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>entities.Produto</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/lojavirtualdb" /> <property name="javax.persistence.jdbc.user" value="root" /> <property name="javax.persistence.jdbc.password" value="root" /> </properties> </persistence-unit> </persistence>

Eu já criei a basededados “lojavirtualdb”!

To utilizando as seguintes .jar:

antlr-2.7.7.jar
avro-1.7.6.jar
commons-compress-1.5.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-4.0.4.Final.jar
hibernate-core-4.3.5.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
hibernate-search-engine-4.5.1.Final.jar
jackson-core-asl-1.9.13.jar
jackson-mapper-asl-1.9.13.jar
jandex-1.1.0.Final.jar
javassist-3.18.1-GA.jar
jboss-logging-3.1.4.GA.jar
jboss-logging-annotations-1.2.0.Beta1.jar
jms-1.1.jar
jsr250-api-1.0.jar
jta-1.1.jar
log4j-1.2.17.jar
lucene-core-3.6.2.jar
mysql-connector-java-5.1.30-bin.jar
paranamer-2.3.jar
slf4j-api-1.7.7.jar
slf4j-log4j12-1.7.7.jar
xml-apis-1.3.03.jar
hibernate-search-infinispan-4.5.1.Final.jar
infinispan-commons-6.0.2.Final.jar
infinispan-core-6.0.2.Final.jar
infinispan-lucene-directory-6.0.2.Final.jar
jboss-marshalling-1.4.4.Final.jar
jboss-marshalling-river-1.4.4.Final.jar
jboss-transaction-api_1.1_spec-1.0.1.Final.jar
jgroups-3.4.3.Final.jar
hibernate-entitymanager-4.3.5.Final.jar
commons-codec-1.6.jar
commons-io-2.1.jar
commons-lang-2.6.jar
hibernate-search-analyzers-4.5.1.Final.jar
lucene-analyzers-3.6.2.jar
lucene-grouping-3.6.2.jar
lucene-highlighter-3.6.2.jar
lucene-kuromoji-3.6.2.jar
lucene-memory-3.6.2.jar
lucene-misc-3.6.2.jar
lucene-phonetic-3.6.2.jar
lucene-smartcn-3.6.2.jar
lucene-spatial-3.6.2.jar
lucene-spellchecker-3.6.2.jar
lucene-stempel-3.6.2.jar
solr-analysis-extras-3.6.2.jar
solr-core-3.6.2.jar
solr-solrj-3.6.2.jar[/list]

A classe de teste roda sem erro e no fim exibe a seguinte saída:

“Hibernate:
insert
into
Produto
(nome, preco)
values
(?, ?)”

E quando eu vou consultar a base de dados, não foi gerada nenhuma tabela.
O que eu faço? :’(

Após o em.getTransaction().commit(); chame em.flush();.

Provavelmente ele vai gritar a mensagem de erro. [=

Cara, vlw!
[Ah propósito, sou seu fã! ;)]

Apareceu o erro aqui:

DEi uma pesquisada rápida no Google e não achei nada em portugues, mas a maioria das páginas estava associada ao “Spring”, sendo que eu mal sei o que é isso e com certeza não estou usando, não que eu saiba é claro!

O que significa isso?

Os seus imports estão certos? Não utilizo essa versão do hibernate, mas nas antigas eu uso as classes dele, não do javax.persistence.

As imports estão certas. To usando esse tutorial aqui:
http://www.k19.com.br/artigos/configurando-hibernate-com-mysql/

Opa, valeu! :3


Não aparece mais nada no log antes desse erro?

Esse erro pode estar relacionado ao Spring se você utilizar o Spring.

Aqui tem um exemplo antigo, mas que funciona: http://uaihebert.com/tutorial-hibernate-3-com-jpa-2/

Se ainda não encontro a solução, dá uma olhada aki!
Talvez possa ajudar. Abçs.

Encontrei a solução!

Coloquei em.clear depois de commitar a transação e funcionou!

E se no lugar de em.clear() eu colocar em.close() tambem funciona.

Mesmo dando certo eu não sei qual o motivo da necessidade de incluir isso e muito menos a diferença entre esses dois método.

E detalhe, além disso ter resolvido o problema, ao tentar rodar o código antigo de novo o problema não voltou a ocorrer!!! O_o

Ou seja, isso me faz crer que o problema tinha alguma ligação com criação de tabelas.

Alguém ae pode me ajudar a entender o que aconteceu? :confused: