Falha a criação de tabela usando o Hibernate[RESOLVIDO]

Olá a todos, comecei a usar o Hibernate a pouco tempo e estou tendo problemas na criação de uma tabela, a conexão com o banco existe mas ao invés de criar a tabela ele tenta fazer o insert direto, sem ter a tabela criada.Vou posta o código e a expection:

Expection:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Hibernate: 
    insert 
    into
        Conta
        (agencia, banco, numero, titular) 
    values
        (?, ?, ?, ?)
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not insert: [br.com.fj25.financas.modelo.Conta]
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1179)
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1112)
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1118)
	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:618)
	at br.com.fj25.testes.ContaTesteHibernate.main(ContaTesteHibernate.java:22)
Caused by: org.hibernate.exception.SQLGrammarException: could not insert: [br.com.fj25.financas.modelo.Conta]
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2329)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2836)
	at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:268)
	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
	at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:69)
	at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:179)
	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:135)
	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
	at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:800)
	at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:774)
	at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:778)
	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:612)
	... 1 more
Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'fj25.conta' doesn't exist
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
	at com.mysql.jdbc.Connection.execSQL(Connection.java:3256)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1313)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1585)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1500)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1485)
	at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94)
	at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)
	... 16 more

Classe Java:

package br.com.fj25.financas.modelo;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Conta {
	@Id
	@GeneratedValue
	private Integer id;

	private String titular;
	private String agencia;
	private String numero;
	private String banco;

	public String getTitular() {
		return titular;
	}

	public void setTitular(String titular) {
		this.titular = titular;
	}

	public String getAgencia() {
		return agencia;
	}

	public void setAgencia(String agencia) {
		this.agencia = agencia;
	}

	public String getNumero() {
		return numero;
	}

	public void setNumero(String numero) {
		this.numero = numero;
	}

	public String getBanco() {
		return banco;
	}

	public void setBanco(String banco) {
		this.banco = banco;
	}

	public Integer getId() {
		return id;
	}

}

xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
	http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
	version="2.0">
	
	<persistence-unit name="controlefinancas">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>br.com.fj25.financas.modelo.Conta</class>

		<properties>		
			<!-- Configuração Hibernate -->
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
			<property name="hibernate.hbm2ddl.auto" value="update"/>
			<property name="hibernate.show_sql" value="true"/>
			<property name="hibernate.format_sql" value="true"/>
			
			<!-- configuração banco!!! -->
			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>			
			<property name= "javax.persistence.jdbc.user" value="root"/>
			<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/fj25"/>
			<property name= "javax.persistence.jdbc.password" value=""/>
			
		</properties>
	</persistence-unit>
</persistence>

Teste:


package br.com.fj25.testes;

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

import br.com.fj25.financas.modelo.Conta;


public class ContaTesteHibernate {
	public static void main(String[] args) {
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("controlefinancas");
		EntityManager entityManager = factory.createEntityManager();
		
		Conta conta = new Conta();
		conta.setTitular("José Roberto Santos");
		conta.setBanco("Bradesco");
		conta.setNumero("123456-6");
		conta.setAgencia("0999");
		
		entityManager.getTransaction().begin();
		entityManager.persist(conta);
		entityManager.getTransaction().commit();
		System.out.println("Conta gravada com sucesso!!!");
	}
}

Caso alguém tenha alguma ideia, desde já agradeço.

Tem certeza que não está faltando nada neste stacktrace? Me parece que você o está cortando da metade para o fim.

Olá drsmachado,

Não está faltando nada, como eu disse ele tenta fazer o insert mesmo não tendo criado a tabela.

No stacktrace não consta a inicialização do hibernate e, por isso, digo que está faltando.
Há algumas ações realizadas pelo hibernate antes de enviar uma query para o banco, entre estas, a identificação do schema/banco de dados e suas tabelas.

Ele dá erro nessa tabela aqui que não existe.
Tenta apagar tudo e tentar recriar, talvez alguma vez essa tabela tenha sido criada.

Essa tabela aqui ele diz que não existe.
fj25.conta

Talvez em algum lugar esteja sendo chamado assim

Não sei c ajudaria, mas tente colocar a seguinte linha:

Olá drsmachado,

Não sei pois comecei a usar o hibernate a pouco tempo(ontem para ser mais exato) estou utilizando os seguintes jars:

antlr-2.7.6.jar
c3p0-0.9.1.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
ehcache-1.5.0.jar
hibernate-jpa-2.0-api-1.0.0.Final.jar
hibernate-jpamodelgen-1.0.0.Final.jar
hibernate3.jar
javassist-3.9.0.GA.jar
jta-1.1.jar
log4j-1.2.15.jar
mysql-connector-java-5.0.7-bin.jar
slf4j-api-1.5.8.jar
slf4j-log4j12-1.5.8.jar

O que pode estar acontecendo é q tu não tenha criado o database, no banco de dados. Como a configuração está para update, no &lt;property name="hibernate.hbm2ddl.auto" value="update"/&gt; , ele irá criar automaticamente as tabelas. Mas isso não ocorrerá se tu não criar o database no banco de dados. Isso está feito??

Fernando Rosa

olá Fernando ,

Criei sim e referenciei no xml:

<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/fj25"/>

[quote=Fernando Generoso da Rosa]O que pode estar acontecendo é q tu não tenha criado o database, no banco de dados. Como a configuração está para update, no &lt;property name="hibernate.hbm2ddl.auto" value="update"/&gt; , ele irá criar automaticamente as tabelas. Mas isso não ocorrerá se tu não criar o database no banco de dados. Isso está feito??

Fernando Rosa[/quote]
Exato, só esqueceu de dizer que ele disparará uma exception.

drsmachado, você poderia me dar um exemplo?

Você não criou o banco não ?

Ele não cria o database.

Somente as tabelas.

Como eu te disse, você está pegando apenas a metade do stacktrace. Acredito que nem debugou para ver se o que eu estou dizendo é, de fato, verdade.
O Hibernate faz todo um processo, verifica as configurações, acessa o banco, lê as tabelas, retorna, compara o mapeamento às tabelas, verifica modificações, processa alterações (quaisquer que sejam) e cria as tabelas faltantes. Isso tudo, por que sua configuração determina como update a propriedade hbm2ddl.auto.
Você está achando que só tem isso no stack por ele ser limitado e o número de linhas geradas ser muito grande.
Sem debugar, não tem como avançar.

[quote=lele_vader]Você não criou o banco não ?

Ele não cria o database.

Somente as tabelas.[/quote]
O hibernate interrompe a execução quando não encontra o banco de dados especificado na configuração. Isso significa, lança uma exception.

Obrigado a todos, finalmente descobri o erro. Erra no xml o dialeto(hibernate.dialect) como estou usando mysql existem 3 tipo e eu estava usando o errado.
Encontrei a lista no guj mesmo nest link:

http://www.guj.com.br/java/262345-problemas-com-tabelas-geradas-pelo-hibernate

Muito Obrigado a todos!!!

É cara, também me deparei com esse mesmo problema e consegui resolver apenas trocando o dialeto

Thks

[quote=cido18]Obrigado a todos, finalmente descobri o erro. Erra no xml o dialeto(hibernate.dialect) como estou usando mysql existem 3 tipo e eu estava usando o errado.
Encontrei a lista no guj mesmo nest link:

http://www.guj.com.br/java/262345-problemas-com-tabelas-geradas-pelo-hibernate

Muito Obrigado a todos!!!
[/quote]

Isso me foi útil hoje.

Obrigado.

Obs.: Eu sei que esse tópico é antigo.