Hibernate - Urgente

Já tentei configurar 2 vezes o Hibernate. Os passos foram:

1 - criei uma tabela chamada Cat (de acordo com a documentação do
Hibernate)

2 - Criei o arquivo hibernate.cfg.xml (informando o nome da base de dados em
java:comp/env/jdbc/BASE_DE_DADOS

3 - Criei o arquivo em XML de mapeamento da classe Cat., com o nome Cat.hbm.xml. Salvei no mesmo diretório que se encontra a classe Cat.

4 - Criei a tabela Cat.

5 - Copiei todos os arquivos do diretório Lib (do arquivo compactado do Hibernate,) para a pasta Lib do meu projeto no eclipse.

Criei um script de teste… e deu erro!
Algo está faltando? Quem pode me ajudar?

Olá Márcio,
olha este tópico aqui talvez possa te ajudar:
http://www.javafree.com.br/forum/viewtopic.php?t=3721&highlight=hibernate
Marcelino Neto - Goiânia - Goiás

Poste o erro, que fica mais fácil ajudar :smiley: .

Segui a orientação do Marcelino Neto… executei os passos citados em http://www.javafree.com.br/forum/viewtopic.php?t=3721&highlight=hibernate . Ao executar, obtive o erro abaixo descrito.

2005-01-03 18:41:53,875 INFO hibernate.cfg.Environment -> Hibernate 2.1.7
2005-01-03 18:41:53,937 INFO hibernate.cfg.Environment -> loaded properties from resource hibernate.properties: {hibernate.connection.username=root, hibernate.connection.password=654321, hibernate.cglib.use_reflection_optimizer=true, hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect , hibernate.connection.url=jdbc:mysql://localhost:3306/cadevc2_agresteonline, hibernate.connection.driver_class=org.gjt.mm.mysql.Driver }
2005-01-03 18:41:53,968 INFO hibernate.cfg.Environment -> using CGLIB reflection optimizer
2005-01-03 18:41:54,015 INFO hibernate.cfg.Environment -> using JDK 1.4 java.sql.Timestamp handling
2005-01-03 18:41:54,015 INFO hibernate.cfg.Configuration -> Mapping resource: Amigo.hbm.xml
2005-01-03 18:41:54,609 DEBUG hibernate.util.DTDEntityResolver -> trying to locate http://hibernate.sourceforge.net/hibernate-mapping.dtd in classpath under net/sf/hibernate/
2005-01-03 18:41:54,609 DEBUG hibernate.util.DTDEntityResolver -> http://hibernate.sourceforge.net/hibernate-mapping.dtdnot found in classpath

[color=red]
Exception in thread “main” java.lang.ClassFormatError: Illegal constant pool index 1 for method name in class file org/dom4j/tree/NamespaceCache
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at org.dom4j.Namespace.(Namespace.java:24)
at org.dom4j.DocumentFactory.createNamespace(DocumentFactory.java:153)
at org.dom4j.tree.NamespaceStack.createNamespace(NamespaceStack.java:287)
at org.dom4j.tree.NamespaceStack.getQName(NamespaceStack.java:168)
at org.dom4j.io.SAXContentHandler.startElement(SAXContentHandler.java:226)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:533)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:798)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:330)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(XMLNSDocumentScannerImpl.java:779)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1794)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
at org.dom4j.io.SAXReader.read(SAXReader.java:339)
at net.sf.hibernate.cfg.Configuration.addInputStream(Configuration.java:286)
at net.sf.hibernate.cfg.Configuration.addClass(Configuration.java:354)
at AmigoDAO.(AmigoDAO.java:18)
at TesteAmigo.main(TesteAmigo.java:24)
[/color]

Ficarei bastante grato ao receber uma ajuda.

Márcio,

Não conheço esse erro, mas, sugiro que confira algumas coisas:

  • Classpath - Veja se todos os JAR necessários estão em seu classpath.
  • Confira a versão dos JARs de seu classpath com a versão que o hibernate 2.1.7 utiliza, caso vc tenha baixado separadamente.

flw

Aliás, poste os códigos!

Abaixo segue alguns detalhes sobre o teste que estou fazendo… e não está rodando direito :frowning:

  • Coloquei todos os arquivos em um único diretório;
  • Copiei todos os arquivos da pasta lib do arquivo hibernate-2.1.7c.zip baixado do site do Hibernate, para a pasta lib do meu projeto;
  • Estou usando o Eclipse;
  • A estrutura do diretório é:
nomeProjeto
  |
  - WEB-INF
          |
          - classes
                |
                - teste
                       |
                       - hibernate
                              |
                              - Amigo.class
                              - AmigoDAO.class
                              - TesteAmigo.class
                              - hibernate.properties
                              - log4j.properties
                              - Amigo.hbm.xml                     
          - lib
          - src
                |
                - teste
                       |
                       - hibernate
                              |
                              - Amigo.java 
                              - AmigoDAO.java
                              - TesteAmigo.java
                              - hibernate.properties
                              - log4j.properties
                              - Amigo.hbm.xml         

Tabela amigos:

[color=green]create table amigos(
nome varchar(40) NOT NULL default ‘’,
endereco varchar(60) not null default ‘’,
fone varchar(11) default null,
cel varchar(11) default null,
email varchar(70) default null,
nascimento datetime default null,
PRIMARY KEY (nome)
);[/color]

Arquivo Amigo.java

[code]

package teste.hibernate;

public class Amigo {
private String nome;
private String endereco;
private String telefone;
private String celular;
private String email;
private java.util.Date nascimento;

public Amigo() {
}

public String getNome(){
return nome;
}

public void setNome(String nome){
this.nome = nome;
}

public String getEndereco(){
return endereco;
}

public void setEndereco(String endereco){
this.endereco = endereco;
}

public String getTelefone(){
return telefone;
}

public void setTelefone(String telefone){
this.telefone = telefone;
}

public String getCelular(){
return celular;
}

public void setCelular(String celular){
this.celular = celular;
}

public String getEmail(){
return email;
}

public void setEmail(String email){
this.email = email;
}

public java.util.Date getNascimento(){
return nascimento;
}

public void setNascimento(java.util.Date nascimento){
this.nascimento = nascimento;
}

} [/code]

Arquivo Amigo.hbm.xml

[code]

<?xml version="1.0"?> [/code]

Arquivo hibernate.properties

hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect 
hibernate.connection.driver_class = org.gjt.mm.mysql.Driver 
hibernate.connection.url = jdbc:mysql://localhost:3306/cadevc2_agresteonline
hibernate.connection.username = root
hibernate.connection.password = 654321

Arquivo log4j.properties

log4j.rootLogger=INFO, dest1 
log4j.appender.dest1=org.apache.log4j.ConsoleAppender 
log4j.appender.dest1.layout=org.apache.log4j.PatternLayout 
log4j.appender.dest1.layout.ConversionPattern=%d %-5p %-5c{3} %x -> %m%n %x -> %m%n

Arquivo AmigoDAO.java

[code]
package teste.hibernate;

import java.util.List;
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.Configuration;

public class AmigoDAO{

private SessionFactory factory;

public AmigoDAO() throws Exception{
factory = new Configuration().addClass(Amigo.class).buildSessionFactory();
}

public void insert(Amigo amigo) throws Exception{
Session session = factory.openSession();
session.save(amigo);
session.flush();
session.close();
}

public java.util.List getList(String condicao) throws Exception{
Session session = factory.openSession();
List amigos = session.find(condicao);
session.flush();
session.close();
return amigos;
}

public Amigo retrieve(String pk) throws Exception{
Session session = factory.openSession();
Amigo amigo = (Amigo)session.load(Amigo.class, pk);
session.flush();
session.close();
return amigo;
}

public void delete(Amigo amigo) throws Exception{
Session session = factory.openSession();
session.delete(amigo);
session.flush();
session.close();
}
} [/code]

8 - Arquivo TesteAmigo.java:

[code]
package teste.hibernate;

public class TesteAmigo {

public static void main(String[] args){ 
    

  try {

    Amigo amigo = new Amigo(); 
    amigo.setNome("Márcio Robério"); 
    amigo.setEndereco("Rua sem nome"); 
    amigo.setTelefone("326-1234"); 
    amigo.setCelular("8806-8779"); 
    amigo.setEmail("roberio@ocodigo.com.br"); 
    //amigo.setNascimento("data do tipo Date"); 
       
    AmigoDAO dao = new AmigoDAO(); 
    dao.insert(amigo); 

  } catch(Exception e) {    
    e.printStackTrace();//aqui vc vai saber que xabu é esse. 
  } 
} 

} [/code]

Após executar o teste, aparece a seguinte mensagem:

[color=red]
log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
net.sf.hibernate.MappingException: Error reading resource: teste/hibernate/Amigo.hbm.xml
at net.sf.hibernate.cfg.Configuration.addClass(Configuration.java:357)
at teste.hibernate.AmigoDAO.(AmigoDAO.java:20)
at teste.hibernate.TesteAmigo.main(TesteAmigo.java:27)
Caused by: net.sf.hibernate.MappingException: persistent class [Amigo] not found
at net.sf.hibernate.cfg.Binder.bindClass(Binder.java:85)
at net.sf.hibernate.cfg.Binder.bindRootClass(Binder.java:222)
at net.sf.hibernate.cfg.Binder.bindRoot(Binder.java:1257)
at net.sf.hibernate.cfg.Configuration.add(Configuration.java:252)
at net.sf.hibernate.cfg.Configuration.addInputStream(Configuration.java:288)
at net.sf.hibernate.cfg.Configuration.addClass(Configuration.java:354)
… 2 more
Caused by: java.lang.ClassNotFoundException: Amigo
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:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:164)
at net.sf.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:102)
at net.sf.hibernate.cfg.Binder.bindClass(Binder.java:82)
… 7 more
[/color]

Opa!!

Cara,
vc conseguiu fazer funcionar a parada?
Estou com o mesmo problema…

Poderia me dizer o que fez???

ele informou que não encontrou o DTD…provavelmente na versão que vocë usa o nome do arquivo é outro …

da uma olhadinha no seu arquivo.hbm.xml

&lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping.dtd"&gt;

talvez seja necessário mudar para:

&lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"&gt;

verifique o nome do arquivo: hibernate-mapping.dtd, pelo jeito ele muda conforme a versão.