Problema com hibernate 3.5.0 Final [RESOLVIDO]

30 respostas
B

Olá galera

Estou seguindo a apostila da caelum fj21 e estou com o seguinte problema quando eu vou rodar a classe GeraTabela para gerar a tabela no banco

Tenho as seguintes classes

import java.util.Calendar;
import javax.persistence.*;

@Entity
public class Produto {

	@Id
	
	@GeneratedValue
	Long id;
	
	String nome;
	double preco;
	private Calendar dataInicioVenda;

getters and setters
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class GeraTabelas {
	
	public static void main(String args[]){
		
		AnnotationConfiguration cfg = new AnnotationConfiguration();
		cfg.addAnnotatedClass(Produto.class);
		
		SchemaExport se = new SchemaExport(cfg);
		se.create(true, true);
	}

}

arquivo hibernate.properties

hibernate.dialect = org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class = com.mysql.jdbc.Driver
hibernate.connection.url = jdbc:mysql://localhost/fj21
hibernate.connection.username = root
hibernate.connection.password = root

hibernate.show_sql = true
hibernate.format_sql = true

adicionei os .jar

hibernate3.jar
hibernate-testing.jar
antilr.jar
commons-collections.jar
dom4j.jar
javassist.jar
jta.jar
slfj4.jar
mysqlconnector.jar

E quando eu rodo a classe GeraTabela da o seguinte mensagem só que não cria a tabela no banco

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
Apr 6, 2010 2:10:15 PM org.hibernate.cfg.annotations.Version <clinit>
INFO: Hibernate Annotations 3.5.0-Final
Apr 6, 2010 2:10:15 PM org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.5.0-Final
Apr 6, 2010 2:10:15 PM org.hibernate.cfg.Environment <clinit>
INFO: loaded properties from resource hibernate.properties: {hibernate.connection.username=root, hibernate.connection.password=****, hibernate.dialect=org.hibernate.dialect.MySQLDialect, hibernate.show_sql=true, hibernate.connection.url=jdbc:mysql://localhost/fj21, hibernate.bytecode.use_reflection_optimizer=false, hibernate.connection.driver_class=com.mysql.jdbc.Driver, hibernate.format_sql=true}
Apr 6, 2010 2:10:15 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : javassist
Apr 6, 2010 2:10:15 PM org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
Apr 6, 2010 2:10:15 PM org.hibernate.annotations.common.Version <clinit>
INFO: Hibernate Commons Annotations 3.2.0.Final
Apr 6, 2010 2:10:15 PM org.hibernate.dialect.Dialect <init>
INFO: Using dialect: org.hibernate.dialect.MySQLDialect
Apr 6, 2010 2:10:15 PM org.hibernate.cfg.AnnotationConfiguration applyHibernateValidatorLegacyConstraintsOnDDL
INFO: Hibernate Validator not found: ignoring
Apr 6, 2010 2:10:15 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: Running hbm2ddl schema export
Apr 6, 2010 2:10:15 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: exporting generated schema to database
Apr 6, 2010 2:10:15 PM org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Using Hibernate built-in connection pool (not for production use!)
Apr 6, 2010 2:10:15 PM org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Hibernate connection pool size: 20
Apr 6, 2010 2:10:15 PM org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: autocommit mode: false
Apr 6, 2010 2:10:16 PM org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost/fj21
Apr 6, 2010 2:10:16 PM org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: connection properties: {user=root, password=****}
Apr 6, 2010 2:10:16 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: schema export complete
Apr 6, 2010 2:10:16 PM org.hibernate.connection.DriverManagerConnectionProvider close
INFO: cleaning up connection pool: jdbc:mysql://localhost/fj21

Atenciosamente

30 Respostas

B

Galera alguem tem uma ideia doke seja?

Eu estou tentando resolver e por enquanto nada =/

T

no seu GeraTabelas após user o se.create…

coloque isso.

Session session = new HibernateUtil().getSession();  
session.createQuery("from Produto");
session.close();
B

Coloquei o código e fiz o seguinte import

import org.hibernate.classic.Session;

Só que o eclipse acusa que a classe HibernateUtil() não existe, pede pra criar a classe

Oq sera q eh isso?

P

ola! a apostila diz pra voce justo ter esse cuidado: na e pra fazer import da Session classic:

remova esse import e troque pela do org.hibernate direto.

alem disso, se o banco nao foi gerado é pq deu erro. o seu log4j.properties esta devidamente configurado?

T

Você não tem a classe HibernateUtil ??

Vai precisar dela, ou pelo menos de alguma classe pra controlar suas conexoes, sessoes, sua Factory

B

Por enquanto eu to seguindo a apostila FJ21 da caelum, eh a primeira vez com o hibernate

Depois eles devem fazer essa classe hibernateutil

Eles passaram esse codigo ateh agora soh

E era pra cria a tabela produto lah soh q nao cria =/

B

Oh a HibernateUtil é no proximo capitulo

Antes disso, não tem log4j pra configurar, só o hibernate.properties mesmo, e com esse mesmo código era crair a tabela no banco

É o exercicio da página 157 e 158 da apostila FJ21 atualizada

http://downloads.caelum.com.br/apostila/caelum-java-web-fj21.pdf

P

Na pagina 158, num box chamado "Configurando o log do Hibernate", ele fala pra voce configurar o log4j pra voce ver exatamente o que esta acontencendo.

Infelizmente a classe SchemaExport tem esse problema: se da pau, ela engole a exception e loga, mas nao imprime nada na tela se o seu log4j nao esta configurado.

Use esse log4j.properties como modelo, colocando-o no seu diretorio src (que vai parar no seu buildpath):

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss} %5p [%-20c{1}] %m%n

log4j.rootLogger=warn, stdout
log4j.logger.org.hibernate=info
B

eu joguei esse arquivo log4j.properities para o scr do projeto como pedido

Mas oq tem que configurar

arquivo log4j.propeties

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=warn, stdout

#log4j.logger.org.hibernate=info
log4j.logger.org.hibernate=debug

### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug

### log just the SQL
#log4j.logger.org.hibernate.SQL=debug

### log JDBC bind parameters ###
log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug

### log schema export/update ###
log4j.logger.org.hibernate.tool.hbm2ddl=debug

### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug

### log cache activity ###
#log4j.logger.org.hibernate.cache=debug

### log transaction activity
#log4j.logger.org.hibernate.transaction=debug

### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug

### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace

Oq tem q mudar nele

Peguei ele da pasta etc do hibernate

B

achei no siste da caelum

Eles disponibilizaram uma pasta com todos os .jars o hibernate.cfj.xml e o log4j.properties

Adicionei todos no projeto

Segue o código

hibernate.cfj.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory>
		
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost/fj21</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
		<property name="show_sql">true</property>
		<property name="format_sql">true</property>
		<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>	
	
	</session-factory>
</hibernate-configuration>

log4j.properties

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss} %5p [%-20c{1}] %m%n

log4j.rootLogger=warn, stdout
log4j.logger.org.hibernate=info

agora quando eu compilo da a seguinte mensagem

16:07:21  INFO [Version             ] Hibernate Annotations 3.5.0-Final
16:07:21  INFO [Environment         ] Hibernate 3.5.0-Final
16:07:21  INFO [Environment         ] hibernate.properties not found
16:07:21  INFO [Environment         ] Bytecode provider name : javassist
16:07:21  INFO [Environment         ] using JDK 1.4 java.sql.Timestamp handling
16:07:21  INFO [Version             ] Hibernate Commons Annotations 3.2.0.Final
Exception in thread "main" org.hibernate.HibernateException: The dialect was not set. Set the property hibernate.dialect.
	at org.hibernate.dialect.Dialect.instantiateDialect(Dialect.java:305)
	at org.hibernate.dialect.Dialect.getDialect(Dialect.java:283)
	at org.hibernate.dialect.Dialect.getDialect(Dialect.java:298)
	at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:121)
	at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:91)
	at br.com.caelum.hibernate.GeraTabelas.main(GeraTabelas.java:12)
P

Ola Bruno

Altere

org.hibernate.dialect.MySQLInnoDBDialect

Para

org.hibernate.dialect.MySQLInnoDBDialect

Vou atualizar la no post!

B

paulo agora deu o seguinte erro

pra q q serve essa linha

<mapping class="br.com.caelum.SUA_CLASSE_AQUI!!"/>

eu tirei do meu arquivo xml e substitui a linha que você pediu

mensagem

16:31:34  INFO [Version             ] Hibernate Annotations 3.5.0-Final
16:31:34  INFO [Environment         ] Hibernate 3.5.0-Final
16:31:34  INFO [Environment         ] hibernate.properties not found
16:31:34  INFO [Environment         ] Bytecode provider name : javassist
16:31:34  INFO [Environment         ] using JDK 1.4 java.sql.Timestamp handling
16:31:34  INFO [Version             ] Hibernate Commons Annotations 3.2.0.Final
Exception in thread "main" org.hibernate.HibernateException: The dialect was not set. Set the property hibernate.dialect.
	at org.hibernate.dialect.Dialect.instantiateDialect(Dialect.java:305)
	at org.hibernate.dialect.Dialect.getDialect(Dialect.java:283)
	at org.hibernate.dialect.Dialect.getDialect(Dialect.java:298)
	at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:121)
	at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:91)
	at br.com.caelum.hibernate.GeraTabelas.main(GeraTabelas.java:12)
P

Essa linha serve pra voce adicionar suas classes se voce nao quiser usar o .addENtity. No seu caso, voce pode retirar.

Bem, se continua com o problema, tudo indica que voce deve ter um hibernate.properties em algum lugar, e ele esta sendo carregado em vez do XML. apague o .properties, ou adicione o dialect no properties.

B

Não tenho nao

Eu apaguei

Até verifiquei todas as pastas do projeto pra ter ctz, mostrando os arquivos ocultos

Só tenho o xml e o log4j.properties =/

B

Criei um projeto novo

Com os .jar daquele arquivo do seu post e o .xml e o log4j.com e deu a mesma msg quando eu compilo a classe GeraTabelas

16:59:13  INFO [Version             ] Hibernate Annotations 3.5.0-Final
16:59:13  INFO [Environment         ] Hibernate 3.5.0-Final
16:59:13  INFO [Environment         ] hibernate.properties not found
16:59:13  INFO [Environment         ] Bytecode provider name : javassist
16:59:13  INFO [Environment         ] using JDK 1.4 java.sql.Timestamp handling
16:59:13  INFO [Version             ] Hibernate Commons Annotations 3.2.0.Final
Exception in thread "main" org.hibernate.HibernateException: The dialect was not set. Set the property hibernate.dialect.
	at org.hibernate.dialect.Dialect.instantiateDialect(Dialect.java:305)
	at org.hibernate.dialect.Dialect.getDialect(Dialect.java:283)
	at org.hibernate.dialect.Dialect.getDialect(Dialect.java:298)
	at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:121)
	at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:91)
	at br.com.caelum.hibernate.GeraTabelas.main(GeraTabelas.java:12)

=/

P

Oi Bruno

Posta pra mim seu hibernate.cfg.xml inteiro?

valeu

B
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory>
		
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost/fj21</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
		<property name="show_sql">true</property>
		<property name="format_sql">true</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> 
	
	</session-factory>
</hibernate-configuration>

ta aqui

E desde já obrigado pela atenção dada ao tópico =D

P

ta tudo mais que correto. algum detalhe esta nos escapando.

ligue o hibernate em modo de debug no log4j.properties. altere

log4j.logger.org.hibernate=info

para

log4j.logger.org.hibernate=debug

e posta a saida

Bruno, to encafifado com isso.

B

a saída foi essa

17:26:02,718 INFO  [main] Main  - javax.xml.transform.TransformerFactory=null
17:26:02,721 INFO  [main] Main  - java.endorsed.dirs=/usr/lib/jvm/java-6-openjdk/jre/lib/endorsed
17:26:02,727 INFO  [main] Main  - launchFile: /home/bruno/javaEE-workspace/.metadata/.plugins/org.eclipse.wst.xsl.jaxp.launching/launch/launch.xml
17:26:14,054 FATAL [main] Main  - No embedded stylesheet instruction for file: file:/home/bruno/javaEE-workspace/hibernate/src/hibernate.cfg.xml
org.eclipse.wst.xsl.jaxp.debug.invoker.TransformationException: No embedded stylesheet instruction for file: file:/home/bruno/javaEE-workspace/hibernate/src/hibernate.cfg.xml
	at org.eclipse.wst.xsl.jaxp.debug.invoker.internal.JAXPSAXProcessorInvoker.transform(JAXPSAXProcessorInvoker.java:225)
	at org.eclipse.wst.xsl.jaxp.debug.invoker.internal.JAXPSAXProcessorInvoker.transform(JAXPSAXProcessorInvoker.java:186)
	at org.eclipse.wst.xsl.jaxp.debug.invoker.internal.Main.main(Main.java:73)
Caused by: org.eclipse.wst.xsl.jaxp.debug.invoker.TransformationException: No embedded stylesheet instruction for file: file:/home/bruno/javaEE-workspace/hibernate/src/hibernate.cfg.xml
	at org.eclipse.wst.xsl.jaxp.debug.invoker.internal.JAXPSAXProcessorInvoker.transform(JAXPSAXProcessorInvoker.java:214)
	... 2 more
P

oi bruno

voce tem certeza que seu hibernate.cfg.xml esta com o nome correto, e dentro do diretorio correto?

deveria aparecer essa linha:
16:19:34 INFO [Configuration ] configuring from resource: /hibernate.cfg.xml

e nao esta aparecendo pra voce. aposto que é a localizacao dele (coloque no src, de modo que ele vai ser copiado pro bin automaticamente)

B

está com o nome correto

hibernate.cfg.xml e está no diretorio scr do projeto, nao esta dentro de nenhum packpage e nada

olha o printscream do projeto

http://dc238.4shared.com/download/264906767/7268fb6/hibernate.png?tsid=20100414-164215-e90a1d25&forceAttachmentDownload=true

P

Oi Bruno

Execute novamente o geratabelas. Essa ultima vez vc sem querer acabou tentado rodar o proprio hibernate.cfg.xml, por isso ele deu essa mensagem fatal. Poste o novo log com debug pra gente.

Outra coisa, verifique se nao ha nenhum erro de compilacao no seu projeto. Se houver, o eclipse para de compilar algumas coisas e nao copia os arquivos pra bin. (verifique pelo file system se o hibernate.cfg.xml do BIN foi realmente alterado e esta la com a info do dialect)

B

sai o seguinte resultado

17:47:47  INFO [Version             ] Hibernate Annotations 3.5.0-Final
17:47:48  INFO [Environment         ] Hibernate 3.5.0-Final
17:47:48  INFO [Environment         ] hibernate.properties not found
17:47:48  INFO [Environment         ] Bytecode provider name : javassist
17:47:48  INFO [Environment         ] using JDK 1.4 java.sql.Timestamp handling
17:47:48 DEBUG [DefaultIdentifierGeneratorFactory] Registering IdentifierGenerator strategy [uuid] -> [class org.hibernate.id.UUIDHexGenerator]
17:47:48 DEBUG [DefaultIdentifierGeneratorFactory] Registering IdentifierGenerator strategy [hilo] -> [class org.hibernate.id.TableHiLoGenerator]
17:47:48 DEBUG [DefaultIdentifierGeneratorFactory] Registering IdentifierGenerator strategy [assigned] -> [class org.hibernate.id.Assigned]
17:47:48 DEBUG [DefaultIdentifierGeneratorFactory] Registering IdentifierGenerator strategy [identity] -> [class org.hibernate.id.IdentityGenerator]
17:47:48 DEBUG [DefaultIdentifierGeneratorFactory] Registering IdentifierGenerator strategy [select] -> [class org.hibernate.id.SelectGenerator]
17:47:48 DEBUG [DefaultIdentifierGeneratorFactory] Registering IdentifierGenerator strategy [sequence] -> [class org.hibernate.id.SequenceGenerator]
17:47:48 DEBUG [DefaultIdentifierGeneratorFactory] Registering IdentifierGenerator strategy [seqhilo] -> [class org.hibernate.id.SequenceHiLoGenerator]
17:47:48 DEBUG [DefaultIdentifierGeneratorFactory] Registering IdentifierGenerator strategy [increment] -> [class org.hibernate.id.IncrementGenerator]
17:47:48 DEBUG [DefaultIdentifierGeneratorFactory] Registering IdentifierGenerator strategy [foreign] -> [class org.hibernate.id.ForeignGenerator]
17:47:48 DEBUG [DefaultIdentifierGeneratorFactory] Registering IdentifierGenerator strategy [guid] -> [class org.hibernate.id.GUIDGenerator]
17:47:48 DEBUG [DefaultIdentifierGeneratorFactory] Registering IdentifierGenerator strategy [uuid.hex] -> [class org.hibernate.id.UUIDHexGenerator]
17:47:48 DEBUG [DefaultIdentifierGeneratorFactory] Registering IdentifierGenerator strategy [sequence-identity] -> [class org.hibernate.id.SequenceIdentityGenerator]
17:47:48 DEBUG [DefaultIdentifierGeneratorFactory] Registering IdentifierGenerator strategy [enhanced-sequence] -> [class org.hibernate.id.enhanced.SequenceStyleGenerator]
17:47:48 DEBUG [DefaultIdentifierGeneratorFactory] Registering IdentifierGenerator strategy [enhanced-table] -> [class org.hibernate.id.enhanced.TableGenerator]
17:47:48  INFO [Version             ] Hibernate Commons Annotations 3.2.0.Final
Exception in thread "main" org.hibernate.HibernateException: The dialect was not set. Set the property hibernate.dialect.
	at org.hibernate.dialect.Dialect.instantiateDialect(Dialect.java:305)
	at org.hibernate.dialect.Dialect.getDialect(Dialect.java:283)
	at org.hibernate.dialect.Dialect.getDialect(Dialect.java:298)
	at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:121)
	at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:91)
	at br.com.caelum.hibernate.GeraTabelas.main(GeraTabelas.java:12)
P

bruno, ele definitivamente nao esta achando nem carregando seu hibernate.cfg.xml mesmo.

de uma olhada se ele realmente esta sendo copiado pro seu bin (veja pelo view navigator do eclipse, ou mesmo pelo browser do gnome de filesystem)

se ele nao esta copiando, eh pq tem algum problema de build no projeto… copie na mao so pra ter certeza uma vez que eh esse o problema

B

Ele esta sim

Fui no workspace do projeto na pasta bin e o .xml e o log4j estao tanto no scr quanto no bin do projeto

P

bruno, manda pra mim seu hibernate cfg xml e log4j properties por email? [email removido]

preciso comparar todos os detalhes, pq aqui é exatamente o que a gente usa

B

conseguiu descobrir o que está acontecendo?

=P

B

Paulo

Eu substitui o arquivo hibernate.cfg.xml pelo hibernate.properties que tem o seguinte conteúdo

hibernate.dialect = org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class = com.mysql.jdbc.Driver
hibernate.connection.url = jdbc:mysql://localhost/fj21
hibernate.connection.username = root
hibernate.connection.password = root
  • os .jars que você disponibilizou no blog da caelum deu certo =D

Se quiser que eu feche o tópico agora eu deixo ele como resolvido, mais se tu quiser ver o porque com o hibernate.cfg.xml não está funcionando o tópico fica a disposição

Muito obrigado mesmo Paulo pela ajuda com o meu problema

Valeu

P

depois de muito olhar seus arquivos de configuracao atras do erro, descobri que o erro nao ta la!

voce esta esquecendo de chamar o ac.configure(); antes de rodar o SchemaExport!!! chame o metodo configure no seu annotationconfiguration antes de usa-lo, caso contrario ele nao vai ler o .cfg.xml

B

Aeeee

Deu certo

\o/

Muito obrigadoo Paulo =D

Até a proxima

Abraçoss

Criado 6 de abril de 2010
Ultima resposta 15 de abr. de 2010
Respostas 30
Participantes 3