[RESOLVIDO] ERRO Hibernate

Boa tarde Galera,

Estou estudando Hibernate, e estou me deparando com o mesmo erro:

[code]

org.hibernate.HibernateException: /hibernate.cfg.xml not found

[code]

Esse erro acontece quando é executado o codigo:

AnnotationConfiguration conf = new AnnotationConfiguration();

        try{
            conf.configure();
        }catch (HibernateException ex){
            ex.printStackTrace();
        }

o que pode ser???

Isso significa que o Hibernate não está encontrando seu arquivo de configuração, chamado de hibernate.cfg.xml.

Vc deve ter esse arquivo ou o hibernate.properties dentro do diretório src e não junto com as classes.

Tenho este arquivo, dentro do Diretorio: src/META-INF

Tira e coloca no src então.

ok, passou, mais agora esta dando o erro:


Exception in thread "main" java.lang.IncompatibleClassChangeError: org/hibernate/cfg/ExtendedMappings

na llinha:

SessionFactory fabrica = conf.buildSessionFactory();

Sua classe está tipo assim:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {
	
	private static SessionFactory factory;
	
	static {
		AnnotationConfiguration cfg = new AnnotationConfiguration();
		
		cfg.configure();
		
		factory = cfg.buildSessionFactory();
	}
	
	public static Session getSession() {
		return factory.openSession();
	}
	
}

Não ela esta assim:

       AnnotationConfiguration conf = new AnnotationConfiguration();

        try{
            conf.configure();
        }catch (HibernateException ex){
            ex.printStackTrace();
        }

        SessionFactory fabrica = conf.buildSessionFactory();
        
        Session sessao = HibernateUtil.getSession();

        java.util.Date data = new java.util.Date();
        data = new Date();

        Amigos ami = new Amigos();
        ami.setNome("Rodrigo");
        ami.setEndereco("rua");
        ami.setFone("3455");
        ami.setCel("9882");
        ami.setEmail("rodrigo@rrmartins.com");
        ami.setNascimento(data);

        Transaction tx = sessao.beginTransaction();
        sessao.save(ami);
        tx.commit();

Qual versão do Hibernate vc está usando?

E cola pra mim os .jars referente ao hibernate que vc está usando no projeto.

Versao: Hibernate 3

mysql-connector-java-5.1.6-bin.jar
hibernate-annotations.jar
hibernate3.jar
antlr-2.7.6.jar
commons-collections-3.1.jar
dim4j-1.6.1.jar
javassist-3.12.0.GA.jar
jta-1.1.jar
slf4j-api-1.6.1.jar

mais a biblioteca do HIBERNATE e o HIBERNATE JPA, que o netbeans tem.

Mas qual das versões do hibernate 3?

Se for a partir da versão 3.5, vc não pode usar o hibernate-annotations.jar
Pq ele já está adicionado dentro do hibernate3.jar, dai pode gerar conflito.

Sugiro a vc, caso não saiba qual a versão exata que está usando, baixar a última versão no site: http://sourceforge.net/projects/hibernate/files/hibernate3/

Ou pega no site da caelum um pacote com todas as dependencias necessárias do hibernate: http://downloads.caelum.com.br/artigos/dependencias-hibernate-3.5.0.zip

E substitui pelos seus jars.

A versao que estou usando é a 3.6.0 Final.

Vou colocar os .jars da caelum e te falo

Pronto fiz o que disse, coloquei os jars da caelum, tirei o hibernate-annotations.jar.

ai fui rodar o codigo e deu o erro:

debug:
SLF4J: The requested version 1.5.8 by your slf4j binding is not compatible with [1.6]
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.format(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/String;
        at org.slf4j.impl.Log4jLoggerAdapter.debug(Log4jLoggerAdapter.java:246)
        at org.hibernate.type.BasicTypeRegistry.register(BasicTypeRegistry.java:144)
        at org.hibernate.type.BasicTypeRegistry.<init>(BasicTypeRegistry.java:50)
        at org.hibernate.type.TypeResolver.<init>(TypeResolver.java:46)
        at org.hibernate.cfg.Configuration.<init>(Configuration.java:249)
        at org.hibernate.cfg.Configuration.<init>(Configuration.java:300)
        at org.hibernate.cfg.AnnotationConfiguration.<init>(AnnotationConfiguration.java:74)
        at amigos.HibernateUtil.<clinit>(HibernateUtil.java:12)
        at amigos.Main.main(Main.java:36)

Na linha 12 do arquivo HibernateUtil.java tem, que esta riscado no meio:

AnnotationConfiguration cfg = new AnnotationConfiguration();

na linha 36 do aquivo Main.java tem:

Session sessao = HibernateUtil.getSession();

Estou colocando o main e o hibernateUtil em anexo

resolvi.

as libs que usei foi:


antlr-2.7.6.jar
asm-attrs.jar
asm.jar
c3p0-0.9.1.jar
cglib-2.1.3.jar
commons-collections-2.1.1.jar
commons-collections-3.1.jar
commons-logging-1.1.jar
dom4j-1.6.1.jar
ehcache-1.2.3.jar
ehcache-1.5.0.jar
ejb3-persistence.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate-entitymanager.jar
hibernate-jpa-2.0-api-1.0.0.Final.jar
hibernate-jpamodelgen-1.0.0.Final.jar
hibernate-tools.jar
hibernate3.jar
javassist-3.12.0.GA.jar
javassist-3.9.0.GA.jar
javassist.jar
jdbc2_0-stdext.jar
jta-1.1.jar
jta.jar
log4j-1.2.15.jar
mysql-connector-java-5.0.7-bin.jar
mysql-connector-java-5.1.6-bin.jar
slf4j-api-1.5.8.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.5.8.jar

e no codigo nao fiz nenhuma mudança…

se quiser mando o codigo é so pedir pelo e-mail rodrigo@rrmartins.com

Blz que resolveu.

T+

Estou com o problema no AnnotationConfiguration configuration = new AnnotationConfiguration(); aparecer riscado no NetBeans.
Estou usando a IDE NetBeans e quando tento instanciar um objeto da classe AnnotationConfiguration o código aparece riscado no meio.
Quando tento fazer o import acontece o mesmo. Por exemplo, quando
faço import org.hibernate.cfg.AnnotationConfiguration; só o comando AnnotationConfiguration aparece riscado. org.hibernate.cfg.AnnotationConfiguration

Alguém sabe o que é isso???
Valeu!

[quote=kokinha]Estou com o problema no AnnotationConfiguration configuration = new AnnotationConfiguration(); aparecer riscado no NetBeans.
Estou usando a IDE NetBeans e quando tento instanciar um objeto da classe AnnotationConfiguration o código aparece riscado no meio.
Quando tento fazer o import acontece o mesmo. Por exemplo, quando
faço import org.hibernate.cfg.AnnotationConfiguration; só o comando AnnotationConfiguration aparece riscado. org.hibernate.cfg.AnnotationConfiguration

Alguém sabe o que é isso???
Valeu![/quote]

Classe deprecated, ou seja, existe hoje outra classe que é melhor. E é mantida a antiga para fins de compatibilidade.

Valeu Ruttmann.
Estou seguindo a apostila Desenvolvimento Ágil para a Web 2.0 com VRaptor, Hibernate e AJAX (fj28) para aprender um pouco de Vraptor. Na apostila tem o seguinte código para adição de produto (página 25):

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

public class AdicaoDeProduto {

    public static void main(String[] args) {
        AnnotationConfiguration configuration = new AnnotationConfiguration();
        configuration.configure();
        SessionFactory factory = configuration.buildSessionFactory();
        Session session = factory.openSession();
        Produto produto = new Produto();
        produto.setNome("Prateleira");

        produto.setDescricao("Uma prateleira para colocar livros");
        produto.setPreco(35.90);
        Transaction tx = session.beginTransaction();
        session.save(produto);
        tx.commit();
    }
}

Nesse caso, se a classe AnnotationConfiguration está depreciada, qual seria a classe mais apropriada para se usar?
Valeu!!!

[quote=kokinha]Valeu Ruttmann.
Estou seguindo a apostila Desenvolvimento Ágil para a Web 2.0 com VRaptor, Hibernate e AJAX (fj28) para aprender um pouco de Vraptor. Na apostila tem o seguinte código para adição de produto (página 25):

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

public class AdicaoDeProduto {

    public static void main(String[] args) {
        AnnotationConfiguration configuration = new AnnotationConfiguration();
        configuration.configure();
        SessionFactory factory = configuration.buildSessionFactory();
        Session session = factory.openSession();
        Produto produto = new Produto();
        produto.setNome("Prateleira");

        produto.setDescricao("Uma prateleira para colocar livros");
        produto.setPreco(35.90);
        Transaction tx = session.beginTransaction();
        session.save(produto);
        tx.commit();
    }
}

Nesse caso, se a classe AnnotationConfiguration está depreciada, qual seria a classe mais apropriada para se usar?
Valeu!!![/quote]

Engraçado que esses dias tava fazendo um projeto de estudo aqui e passei pelo mesmo caso, tenho até o link salvo aqui.

Agora se usa a classe Configuration.

Mas, se você está apenas estudando, pode deixar essa classe, mesmo que deprecated. Ela fica assim riscada, justamente pra avisar o programador de que está eleita para exclusão, mas continua por um certo tempo por motivos de compatibilidade, mas as funcionalidades da classe continuam na boa.

Aí você que sabe. Não é difícil encontrar a implementação que substitui essa, no Google fica fácil! :wink: