Hibernate - Erro[RESOLVIDO]

Boa tarde , Pessoal,

ERRO :
Exception in thread “main” java.lang.NullPointerException
at Conecta.main(Conecta.java:15)
não deu
org.hibernate.MappingNotFoundException: resource: Cliente not found

estou tentando fazer o mapeamento, pois estou começando a estudar um livro, e peguei o exemplo abaixo :
Obs. a conexão do banco esta OK e estou colocando minha classe Cliente.java no mesmo local que esta o hibernate.cfg.xml

<mapping resource="Cliente" /> 

CONNECT, é aonde vou criar a tabelas do meu sistema.

import org.hibernate.Session;

import com.kurtph.sistema.vendas.HibernateUtil;


public class Conecta {
	
	public static void main(String[] args) {
		Session sessao = null;
		try {
			 sessao = HibernateUtil.getSession().openSession();
			 System.out.println("Conectado");
			
		}finally{
			sessao.close();
			System.out.println("fechou conexao");
		}
		
	}

}

hibernate.cfg.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="connection.driver_class">
      com.mysql.jdbc.Driver
    </property>
    
    <property name="connection.url">
      jdbc:mysql://localhost/sistemavendas
    </property>

    <property name="connection.username">root</property>
    <property name="connection.password">admin</property>

    <property name="dialect">
      org.hibernate.dialect.MySQL5Dialect
    </property>
    
    
     <property name="hibernate.hbm2ddl.auto">update</property> 
    <mapping resource="Cliente" /> 
  </session-factory>
</hibernate-configuration>

Cliente.java

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="cliente")
public class Cliente {
	
	@Id
	@GeneratedValue
	private Integer id;
	private String cpf;
	private String email;
	private String endereco;
	@Column(name="data_cadastro")
	private Date datacadastro;	
	private String nome ;	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getCpf() {
		return cpf;
	}
	public void setCpf(String cpf) {
		this.cpf = cpf;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getEndereco() {
		return endereco;
	}
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	public Date getDatacadastro() {
		return datacadastro;
	}
	public void setDatacadastro(Date datacadastro) {
		this.datacadastro = datacadastro;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public Float getRenda() {
		return renda;
	}
	public void setRenda(Float renda) {
		this.renda = renda;
	}
	private Float renda;
}

Fala Garoto!!

me diz uma coisa, essa classe cliente esta dentro de algum pacote?

Creio eu que você precise mapear um XML com dados da Classe cliente - “Cliente.hbm.xml”, por exemplo.
No caso de estar usando uma abordagem annotattion-driven isso nao se torna necessário, mas você deve configurar de forma correta.
De qualquer forma, posta a sua Classe que tem o método main.

Entao minha classe, esta no mesmo lugar do hibernate.cfg.xml,

A classe main, esta acima.

Obrigado

Evandro

Pelo erro seu mapemamento <mapping resource="Cliente" /> esta errado, se estiver dentro de algum pacote vc deve adcionar.
Exemplo:

<mapping resource="nomedopacote.Cliente" />   

Desculpe minha falta de atenção, posta a classe onde você realiza a configuração.

Dei uma pesquisada aqui e também acho que pode ser o nome do pacote.

Qual tutorial você está seguindo?
Você precisa, obrigatoriamente, criar um arquivo chamado Cliente.hbm.xml e, é este arquivo que deve ser referenciado na tag
[color=red]Desde que:[/color]

  • O arquivo de configuração Cliente.hbm.xml esteja apenas na pasta src (package padrão)
    Como eu não gosto de XML, eu oriento trocar isso por Annotation, logo, esta sua tag seria substituída por

    [color=red]Desde que:[/color]
  • A classe Cliente esteja apenas no src (package padrão)

Pessoal,

Minha estrutura de arquivo igual na imagem,

Por xml, consigo fazer , mas gostaria de fazer da forma Annotation, alguem pode me orientar ??por favor

O nome da classe a ser mapeada precisa conter o pacote, ou seja,
você deve usar um Full Class-name a NÃO ser que esta classe esteja
no pacote default, que não é o seu caso.

Pessoal,

Coloquei assim : e continua o mesmo erro


    <mapping resource="com.kurtph.sistema.cliente.Cliente" />  


Isso acontece por que você está usando o mapping resource para mapear uma classe. Troque por mapping class.

Ao invés de <mapping resource="com.kurtph.sistema.cliente.Cliente" />

use:

<mapping class="com.kurtph.sistema.cliente.Cliente" />.

Se você especifica com resource ele procura um XML, e você quer uma classe.

Galera,

o erro mudou …

NFO: Configuration resource: hibernate.cfg.xml
Exception in thread “main” java.lang.NullPointerException
at Conecta.main(Conecta.java:15)
não deu
org.hibernate.MappingException: An AnnotationConfiguration instance is required to use

[quote=evandro_araujo]Galera,

o erro mudou …

NFO: Configuration resource: hibernate.cfg.xml
Exception in thread “main” java.lang.NullPointerException
at Conecta.main(Conecta.java:15)
não deu
org.hibernate.MappingException: An AnnotationConfiguration instance is required to use
[/quote]
Isso quer dizer que agora a configuração está ok, mas a linha 15 da classe Conecta possui a invocação de método ou atributo em um objeto nulo.

Entao,

Minha linha é sessao.close();

Obs. Mas nao criou a tabela cliente no meu banco de dados, significa que nao deu certo ?


public class Conecta {
	
	public static void main(String[] args) {
		Session sessao = null;
		try {
			 sessao = HibernateUtil.getSession().openSession();
			 System.out.println("Conectado");
			
		}finally{
			sessao.close();
			System.out.println("fechou conexao");
		}
		
	}

}

Posta a classe HibernateUtil.
Parece que há um problema na instanciação do objeto de configuração.

Se tivesse um catch, teríamos como saber qual o verdadeiro erro, já que NPE é apenas a consequência de um erro “omitido”.

Pessoal,

Coloquei o catch : e o erro que esta dando :

org.hibernate.MappingException: An AnnotationConfiguration instance is required to use
Exception in thread “main” java.lang.ExceptionInInitializerError
at com.kurtph.sistema.vendas.HibernateUtil.buildSessionFactory(HibernateUtil.java:17)
at com.kurtph.sistema.vendas.HibernateUtil.(HibernateUtil.java:7)
at Conecta.main(Conecta.java:12)

public class Conecta {
	
	public static void main(String[] args) {
		Session sessao = null;
		
		try {
			 sessao = HibernateUtil.getSession().openSession();
			 System.out.println("Conectado");
			
			 
		} catch (Exception e) {
			System.out.println(e);
		}
		
	}

}


package com.kurtph.sistema.vendas;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
  private static final SessionFactory session = buildSessionFactory();

   private static SessionFactory buildSessionFactory() {
	    try {
	    	Configuration cfg = new Configuration();
	    	cfg.configure("hibernate.cfg.xml");
	    	return cfg.buildSessionFactory();
			
		} catch (Throwable e) {
			System.out.println("não deu\n"+e);
			throw new ExceptionInInitializerError();
		}

   }

public static SessionFactory getSession() {
	return session;
}
}

Se eu me lembro, é assim

AnnotationConfiguration cfg = new AnnotationConfiguration().configure("seu.xml.aqui.hbm.xml");

Mas, não tenho certeza.