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)
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. 
[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 
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. 
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. 
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]