Hibernate, erro ao tentar acessar banco

Estou iniciando os estudos com o Hibernate e peguei um exemplo pronto da Caelum, o arquivo hibernate.properties eu coloco dentro da pasta src do projeto?
Quando eu executo a main ele dá esse erro, já coloquei todas as bibliotecas no projeto, Core, Annotations, EntityManager, Validator, alguém sabe no que eu to errando.

Obrigado!

run:
SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread “main” java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
at org.slf4j.LoggerFactory.getSingleton(LoggerFactory.java:223)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:120)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:269)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:242)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:255)
at org.hibernate.cfg.Configuration.(Configuration.java:152)
at br.com.caelum.hibernate.HibernateUtil.(HibernateUtil.java:10)
at br.com.caelum.hibernate.AdicionaProduto.main(AdicionaProduto.java:15)
Caused by: java.lang.ClassNotFoundException: org.slf4j.impl.StaticLoggerBinder
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
… 9 more
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)

Acho que vc se encaixa neste mesmo caso http://www.guj.com.br/posts/list/142568.java

Conforme eu comentei em outro tópico http://www.guj.com.br/posts/preList/139540/751117.java#751117

[i]Esse erro que você está tendo indica que não foi encontrada a classe org/slf4j/impl/StaticLoggerBinder e que você deve visitar o site do SLF4J para mais informações.

O Hibernate usa uma façade para logging e não mais diretamente a implementação. Então vocẽ deve escolher qual implementação de logging usar, sendo o log4j o mais usado. Então no site do SLF4J vocẽ pode ter mais informações e os links para download da implementação de logging que vocẽ quer usar, além de um conector para o mesmo.

http://www.slf4j.org/codes.html#StaticLoggerBinder[/i]

E neste aqui http://www.guj.com.br/posts/preList/139540/751224.java#751224

Para você entender melhor, o slf4j funciona como uma abstração do logging. Assim você precisa não apenas da implementação (log4j no seu caso), mas também de um conector entre ambos. Nesse caso baixe o zip do slf4j (http://www.slf4j.org/download.html), descompacte e coloque o slf4j-log4j12-1.5.8.jar no seu classpath.

Fiz o que vcs disseram mas agora está dando esse erro.

Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/log4j/Level
at org.slf4j.LoggerFactory.getSingleton(LoggerFactory.java:223)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:120)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:269)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:242)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:255)
at org.hibernate.cfg.Configuration.(Configuration.java:152)
at br.com.caelum.hibernate.HibernateUtil.(HibernateUtil.java:10)
at br.com.caelum.hibernate.AdicionaProduto.main(AdicionaProduto.java:15)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Level
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
… 9 more

Você precisa do log4j tambem.

O meu arquivo hibernate.properties está dentro da pasta src do projeto e as configurações dele está assim:
Tá dando trabalho esse Hibernate, espero que valha a pena. :smiley:

[code]## MySQL

hibernate.dialect org.hibernate.dialect.MySQLDialect
hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
hibernate.connection.driver_class com.mysql.jdbc.Driver
hibernate.connection.url jdbc:mysql:///test
hibernate.connection.username root
hibernate.connection.password 3299[/code]

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version). log4j:WARN Please initialize the log4j system properly. Exception in thread "main" java.lang.ExceptionInInitializerError at AdicionaPessoa.main(AdicionaPessoa.java:9) Caused by: org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection avalable at org.hibernate.dialect.resolver.DialectFactory.buildDialect(DialectFactory.java:107) at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:138) at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2119) at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2115) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1339) at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) at HibernateUtil.<clinit>(HibernateUtil.java:9) ... 1 more

douglastc, você tem que ler as mensagens de log, elas de dizem qual é o erro.

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version). log4j:WARN Please initialize the log4j system properly.

Você não inicializou o log4j, trocando em miúdos, você precisa de um arquivo log4j.properties dentro do src do seu projeto com as configurações. O hibernate vem com um de exemplo.

Douglas,

No caso do seu hibernate.properties, talvez no post tenha faltado o sinal de igual (=). Se no seu arquivo está sem o sinal de igual, então coloque em todas as linhas. Outra coisa é: Use apenas 1 dialeto. No seu caso, eu deixaria o primeiro dialeto setado (MySQL).

Garcia: no caso do log4j é apenas um WARNING e não é por causa dele que gerou a exception.

[quote=Jair Rillo Junior]Douglas,

No caso do seu hibernate.properties, talvez no post tenha faltado o sinal de igual (=). Se no seu arquivo está sem o sinal de igual, então coloque em todas as linhas. Outra coisa é: Use apenas 1 dialeto. No seu caso, eu deixaria o primeiro dialeto setado (MySQL).

Garcia: no caso do log4j é apenas um WARNING e não é por causa dele que gerou a exception.[/quote]

So para corrgir, não é necessário colocar = (igual) para delimitar chave de valor em um arquivo properties. Apenas espaço é suficiente.

[Quote]
The key contains all of the characters in the line starting with the first non-white space character and up to, but not including, the first unescaped ‘=’, ‘:’, or white space character other than a line terminator. All of these key termination characters may be included in the key by escaping them with a preceding backslash character; for example,
[/Quote]

O warning não causou o erro mas para corrigi-lo faça igual o garcia falou.
O erro é devido ao seu dialeto, tente fazer igual o Jair disse!

[quote=Jair Rillo Junior]Douglas,

No caso do seu hibernate.properties, talvez no post tenha faltado o sinal de igual (=). Se no seu arquivo está sem o sinal de igual, então coloque em todas as linhas. Outra coisa é: Use apenas 1 dialeto. No seu caso, eu deixaria o primeiro dialeto setado (MySQL).

Garcia: no caso do log4j é apenas um WARNING e não é por causa dele que gerou a exception.[/quote]

[code]## MySQL

=hibernate.dialect org.hibernate.dialect.MySQLDialect
#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
=hibernate.connection.driver_class com.mysql.jdbc.Driver
=hibernate.connection.url jdbc:mysql:///test
=hibernate.connection.username root
=hibernate.connection.password 3299
[/code]

No caso as linhas ficariam assim?

Eu já troquei o acesso pro SQL Server e sempre dá o mesmo erro, será o problema pode estar no arquivo?

adicione o jar commons-logging … procure ler as exceções que está dando… quando vc adicionou a api sl4j ele deu falta de outra classe… vai adicionando que uma hora funfa

Vivendo e aprendendo :wink:

Douglas, o igual é entre a key e valor da properties

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

Jair, mesmo sendo um arquivo .properties o hibernate.properties não usa =, portanto o arquivo do douglastc está corrento.

douglastc, qual o erro que está dando agora? Você corrigiu o problema do log?

[quote=garcia-jj]Jair, mesmo sendo um arquivo .properties o hibernate.properties não usa =, portanto o arquivo do douglastc está corrento.

douglastc, qual o erro que está dando agora? Você corrigiu o problema do log?[/quote]

Eu salvei o log dentro do src, tem que mexer em alguma configuração dele? Pois está aparecendo os mesmo erros.

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version). log4j:WARN Please initialize the log4j system properly. Exception in thread "main" java.lang.ExceptionInInitializerError at AdicionaPessoa.main(AdicionaPessoa.java:9) Caused by: org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection avalable at org.hibernate.dialect.resolver.DialectFactory.buildDialect(DialectFactory.java:107) at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:138) at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2119) at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2115) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1339) at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) at HibernateUtil.<clinit>(HibernateUtil.java:9) ... 1 more

douglastc, você está certo, o log4j.properties é dentro do src. Mas é estranho ele não estar achando. Você compilou tudo? Ele deveria copiar esse log4j.properties para o diretório classes.

Abraços

[quote=garcia-jj]douglastc, você está certo, o log4j.properties é dentro do src. Mas é estranho ele não estar achando. Você compilou tudo? Ele deveria copiar esse log4j.properties para o diretório classes.

Abraços[/quote]

Gente, o problema sem duvidas não é com o log4j. Aquilo é um WARNING e WARNING não é ERRO. :slight_smile:

Posta novamente seu hibernate.properties poque ele continua errado. Outra coisa posta a classe que você faz o buildSessionFactory para ver se ela esta correta.

O seu hibernate.properties deverá esta mais ou menos assim:

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

[quote=garcia-jj]douglastc, você está certo, o log4j.properties é dentro do src. Mas é estranho ele não estar achando. Você compilou tudo? Ele deveria copiar esse log4j.properties para o diretório classes.

Abraços[/quote]

Eu salvei os arquivos hibernate.properties e o log4j.properties na pasta lib e os erros mudaram. Agora tá aparecendo isso:

Exception in thread "main" java.lang.ExceptionInInitializerError at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:243) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:255) at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:152) at HibernateUtil.<clinit>(HibernateUtil.java:7) at AdicionaPessoa.main(AdicionaPessoa.java:9) Caused by: java.lang.IllegalArgumentException: Malformed \uxxxx encoding. at java.util.Properties.loadConvert(Unknown Source) at java.util.Properties.load0(Unknown Source) at java.util.Properties.load(Unknown Source) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:433) at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:470) at org.apache.log4j.LogManager.<clinit>(LogManager.java:122) ... 6 more

[quote=Eliezer Reis][quote=garcia-jj]douglastc, você está certo, o log4j.properties é dentro do src. Mas é estranho ele não estar achando. Você compilou tudo? Ele deveria copiar esse log4j.properties para o diretório classes.

Abraços[/quote]

Gente, o problema sem duvidas não é com o log4j. Aquilo é um WARNING e WARNING não é ERRO. :slight_smile:

Posta novamente seu hibernate.properties poque ele continua errado. Outra coisa posta a classe que você faz o buildSessionFactory para ver se ela esta correta.

O seu hibernate.properties deverá esta mais ou menos assim:

hibernate.dialect = org.hibernate.dialect.MySQLDialect hibernate.connection.driver_class = com.mysql.jdbc.Driver hibernate.connection.url = jdbc:mysql://localhost:3306/meubanco hibernate.connection.username = root hibernate.connection.password = 3299 [/quote]

Eu mudei o meu hibernate.properties como vc falou.
Aqui está o código do SessionFactory

[code]import org.hibernate.;
import org.hibernate.cfg.
;

public class HibernateUtil {
	private static SessionFactory factory;
    static {
    AnnotationConfiguration cfg = new AnnotationConfiguration();
    cfg.addAnnotatedClass(Pessoa.class);
    factory = cfg.buildSessionFactory();
    }
    
    public Session getSession() {
    
    	return factory.openSession();
    }
} [/code]

É claro que não, porém apenas com o logging funcionando conseguiremos saber qual o erro, certo?

douglastc, os arquivos log4j.properties e hibernate.properties precisam estar dentro do seu src. Você usa eclipse? Verifique se ele está mesmo aparecendo na arvore navigator. Compile o projeto (ideal é fazer um clean no projeto via menu Project > Clean all) e depois rodar de novo seu projeto.

Seu hibernate.properties está errado, deve ser assim (sem o =)

hibernate.dialect org.hibernate.dialect.MySQLDialect hibernate.connection.driver_class com.mysql.jdbc.Driver hibernate.connection.url jdbc:mysql://localhost:3306/meubanco hibernate.connection.username root hibernate.connection.password 3299

Abraços

douglastc, esqueci… deixa teu log4j aqui? Ou então use esse aqui:

[code]log4j.rootLogger=INFO, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss} %1p (%F:%L) - %m[/code]