Galera quando a minha classe responsável por criar a sessão com o hibernate não consegue encontrar o meu arquivo hibernate.cfg.xml, oq devo fazer, eu já coloquei este arquivo no classpath e não deu certo tb.
Abraços._
Galera quando a minha classe responsável por criar a sessão com o hibernate não consegue encontrar o meu arquivo hibernate.cfg.xml, oq devo fazer, eu já coloquei este arquivo no classpath e não deu certo tb.
Abraços._
tenta colocar o “hibernate.cfg.xml” na raiz da sua aplicação, ou seja logo em baixo da pasta “src” se usa Eclipse, ou no pacote “default” se usa Netbeans.
Você pode também configurar a sua “SessionFactory” no código mesmo, escrevendo uma classe “configuradora” assim:
/** Instância da sessionFactory. */
private static SessionFactory sessionFactory;
/**
Retorna a sessionFactory.
*/
public static SessionFactory getSessionFactory() {
if (sessionFactory == null) {
try {
// Pega as propriedades do Hibernate
Properties props = getHibernateProperties();
Configuration cfg = new Configuration();
Class a = Class.forName("PrimeiraClasse);
cfg.addClass(a);
Class b = Class.forName("SegundaClasse);
cfg.addClass(b);
// Mesma coisa com as outras classes.
cfg.setProperties(props);
sessionFactory = cfg.buildSessionFactory();
} catch (Exception ex) {
ex.printStackTrace();
}
}
return sessionFactory;
}
/**
* Cria e retorna as propriedades de configuração do Hibernate.
*/
private static Properties getHibernateProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.connection.driver_class",
"driver"/* SEU DRIVER AQUI */);
properties.setProperty("hibernate.connection.url",
"url" /* SEU URL AQUI */);
properties.setProperty("hibernate.dialect",
"dialeto" /* SEU DIALETO AQUI */);
properties.setProperty("hibernate.connection.username",
" " /* SEU USUARIO QUE ACESSA DB AQUI */);
properties.setProperty("hibernate.connection.password",
" " /* SUA SENHA DE ACESSO AO DB AQUI */);
return properties;
}
Acho que assim funciona. Pode até colocar as classes em um arquivo de texto, ou XML, e carregá-las lendo esse arquivo. Mesma coisa para os dados de configuração de url, usaário, senha e dialeto para acessar o banco de dados.
Espero que ajude.
Olá patrizio td bem,
Então eu estou usando o netbeans e coloquei o meu hibernate.cfg.xml no pacote default do netbeans e continuou apresentando o mesmo erro.Criei uma classe configuradora = a sua, mas só que ele está dando este erro :
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
org.hibernate.MappingNotFoundException: resource: hibernate/Cliente.hbm.xml not found
at org.hibernate.cfg.Configuration.addClass(Configuration.java:538)
at Teste2.getSessionFactory(Teste2.java:34)
at Teste2.main(Teste2.java:73)
Exception in thread “main” java.lang.NullPointerException
at Teste2.main(Teste2.java:73)
Acredito q esta classe não está achando o meu mapeamento para a classe cliente.Como eu devo informar este mapeamento a está classe configuradora.
Abraços e muito obrigado pela ajuda._
Eu também tenho o seguinte erro, pois ainda não aprendi como configurar o tal de log4j:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Vamos ver este outro erro:
org.hibernate.MappingNotFoundException: resource: hibernate/Cliente.hbm.xml not found
eu acho que você tem uma classe Cliente.java no pacote hibernate. Quando o método para crear a SessionFactory faz a inclusão das classes a serem mapeadas, o Hibernate verifica o mapeamento procurando o arquivo XML de mapeamento (no seu caso, Cliente.hbm.xml), que deveria ficar no mesmo pacote da classe Cliente.java
Talvez você não tenha esse arquivo no pacote. Classe (arquivo .java) e arquivo de mapeamento (arquivo .hbm.xml) devem ficar no mesmo pacote, a não ser que especifique um percurso diferente no mesmo xml.
PS eu também uso netbeans, e dava o mesmo erro seu, usando o arquivo hibernate.cfg.xml
Não lembro se e como resolvi, mas de fato passei usar a classe configuradora.
Estou anexando uma imagem da estrutura dos meus pacotes na aplicação Hibernate que estou escrevendo.
A pergunta pode ser besta , mas vc adicionou o log4.jar na sua aplicação ?
[quote=patrizio.cannoni]Eu também tenho o seguinte erro, pois ainda não aprendi como configurar o tal de log4j:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Vamos ver este outro erro:
org.hibernate.MappingNotFoundException: resource: hibernate/Cliente.hbm.xml not found
eu acho que você tem uma classe Cliente.java no pacote hibernate. Quando o método para crear a SessionFactory faz a inclusão das classes a serem mapeadas, o Hibernate verifica o mapeamento procurando o arquivo XML de mapeamento (no seu caso, Cliente.hbm.xml), que deveria ficar no mesmo pacote da classe Cliente.java
Talvez você não tenha esse arquivo no pacote. Classe (arquivo .java) e arquivo de mapeamento (arquivo .hbm.xml) devem ficar no mesmo pacote, a não ser que especifique um percurso diferente no mesmo xml.
PS eu também uso netbeans, e dava o mesmo erro seu, usando o arquivo hibernate.cfg.xml
Não lembro se e como resolvi, mas de fato passei usar a classe configuradora.
Estou anexando uma imagem da estrutura dos meus pacotes na aplicação Hibernate que estou escrevendo.
[/quote]
Sim, pois sem o jar do log4j no classpath nem aparece aquele WARNING que não está configurado. Simplesmente da um erro de runtime.
Porém, o warning do log4j devido a falta de configuração do mesmo, não tem muito a ver com o erro de mapeamento que acontece com o anderline
Patrizio o pior q meu cliente.hbm.xml está no mesmo pacote q minha classe Cliente, cara será q não ser algum erro na versão do hibernate q eu baixei, qdo vc configurou os jars dele no seu netbeans vc adicionou eles ao seu CLASSPATH tb.
Abraços._
Adicionei os jars do hibernate como na imagem que estou anexando.
Os jars marcados em vermelho são o que o Hibernate usa. Os outros não tem nada a ver.
Cara, a versão que eu baixei do site foi a 3.1, se não me engano.
Putz, aqui vai que é uma maravilha.
Tenta postar o arquivo cliente.hbm.xml
Olá patrizio, vou postar e colocar como arquivo a minha classe cliente, a classe que cria a sessão e o mapeamento.
Abraços.
//Classe que cria a sessão
package hibernate;
import java.util.Properties;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
public class Teste2{
/** Instância da sessionFactory. */
private static SessionFactory sessionFactory;
/**
Configuration cfg = new Configuration();
Class a = Class.forName(“hibernate.Cliente”);
cfg.addClass(a);
//Class b = Class.forName("");
//cfg.addClass(b);
// Mesma coisa com as outras classes.
cfg.setProperties(props);
sessionFactory = cfg.buildSessionFactory();
} catch (Exception ex) {
ex.printStackTrace();
}
}
return sessionFactory;
}
/**
properties.setProperty(“hibernate.connection.driver_class”,
“com.mysql.jdbc.Driver”/* SEU DRIVER AQUI /);
properties.setProperty(“hibernate.connection.url”,
“jdbc:mysql://localhost/hibernate” / SEU URL AQUI /);
properties.setProperty(“hibernate.dialect”,
“org.hibernate.dialect.MySQLDialect” / SEU DIALETO AQUI /);
properties.setProperty(“hibernate.connection.username”,
"root " / SEU USUARIO QUE ACESSA DB AQUI /);
properties.setProperty(“hibernate.connection.password”,
" " / SUA SENHA DE ACESSO AO DB AQUI */);
//properties.setProperty(“mapping”,“resource = cliente.hbm.xml”);
return properties;
}
public static void main(String args[]){
Teste2 t = new Teste2();
Session s = t.getSessionFactory().openSession();
}
}
//Classe Cliente
package hibernate;
/*
/**
*
@author anderline
/
public class Cliente {
private String nome;
private String endereco;
/* Creates a new instance of Cliente */
public Cliente() {
}
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;
}
}
//Mapeamento da classe Cliente
Lembrando que todos os arquivos estão no pacote hibernate.
Então o ideal seria vc tentar executar elas aí no seu ambiente, pois ele já está configurado.
Abraços.
Bom minha estrutura está assim , segue a imagem em anexo
Está funcionado corretamente !
Meu hibernate.cfg.xml:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">sun.jdbc.odbc.JdbcOdbcDriver</property>
<property name="connection.url">jdbc:odbc:hibernate</property>
<property name="connection.username">sa</property>
<property name="connection.password"></property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">br.dao.Dialect.MSAccessDialect</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<!-- <property name="hbm2ddl.auto">create</property> -->
<mapping resource="mapeamento/Event.hbm.xml"/>
<mapping resource="mapeamento/Pessoa.hbm.xml"/>
<mapping resource="mapeamento/Palestra.hbm.xml"/>
<mapping resource="mapeamento/EventoPessoa.hbm.xml"/>
<mapping resource="mapeamento/PalestraPessoa.hbm.xml"/>
<mapping resource="mapeamento/Email.hbm.xml"/>
<mapping resource="mapeamento/Telefone.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Ok, seu código funciona comigo, mas fiz umas pequenas alterações:
Peguei assim os arquivos, copiei em um novo projeto no pacote hibernate, importei todos os jars come na postei anteriormente, et voilá … funciona. Fiz a inserção de um cliente no meu banco MySQL (versão 5)
Em anexo seus arquivos modificados.
Abraço
PS se quiser usar o arquivo de configuração hibernate.cfg.xml, mova ele fora do pacote hibernate. Eu vi na imagem que você postou que o xml está dentro do pacote hibernate. Mova ele pra baixo (default package), e acho que vai funcionar com o arquivo xml também. btw, eu prefiro usar a classe configuradora.
E aí Patrizio blz,
Putz cara já estou quase desistindo, movi o meu cliente.hbm.xml e meu Cliente.java para o default package e continua apresentando o mesmo erro, o hibernate não consegue carregar ou achar o meu cliente.hbm.xml.
Cara eu estou usando a versão 3.2, será q pode ser isso ?._
Abraços._
Cara tenta colocar no teu mapeamento no hbm.xml algo do tipo:
E o mesmo p o endereco!
Espero ter ajudado!
Abraço!
Cara para postar códigos coloque entre as tags [ code] e [ /code] para ficar identado
sobre o hibernate porque você não usa Annotations? acho muito mais simples, porque você escreve nas Classes direto sem precisar de xml,(só funciona depois da 1.5)
Exemplo
public class Pessoa(){
public String nome;
}
Mapeando o nome com Xml
<property name="nome"
type="java.lang.String"
column="nome"
not-null="true" />
Mapeando o nome com Annotations(MEsma classe Pessoa)
@Entity
public class Pessoa(){
@Column(name="nome", nullable="false")
public String nome;
}
Mas se você procurar na internet você vai achar mais exemplos
Cara, eu tava com o mesmo pau aqui e li seu tópico. Não consegui, ai testei uma coisa simples e funcionou! Olha só:
no meu cfg.xml estava assim
<mapping resource="controller.Usuario.hbm.xml"/>
eu alterei para
<mapping resource="Usuario.hbm.xml"/>
E funcionou! Tenta ae! Qm sabe! =)
E tem outra, o cfg.xml está na pasta default!