Hibernate não cria tabela!

7 respostas
L

Meu Hibernate simplesmente não tá funcionando!

To usando a seguinte classe de teste:

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();
	}
}

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? :'(

7 Respostas

H

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

Provavelmente ele vai gritar a mensagem de erro. [=

L

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?

E

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.

L

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

H

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/

D

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

L

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:

Criado 6 de maio de 2014
Ultima resposta 9 de mai. de 2014
Respostas 7
Participantes 4