Ajuda em 1º Exercício usando Hibernate

Olá pessoal,

Estou tentando fazer meu primeiro exercício usando Hibernate. A minha estrutura é a seguinte:
Netbeans 5
MySql 5.0

Agora olha oque eu fiz:

Classe Pessoa.java

 package mypackage;
 
 public class Pessoa {
     
     private int idPessoa;
     private String nomePessoa;
     private String sobrenomePessoa;
     
     /** Creates a new instance of Pessoa */
     public Pessoa() {
     }
 
     public int getIdPessoa() {
         return idPessoa;
     }
 
     public void setIdPessoa(int idPessoa) {
         this.idPessoa = idPessoa;
     }
 
     public String getNomePessoa() {
         return nomePessoa;
     }
 
     public void setNomePessoa(String nomePessoa) {
         this.nomePessoa = nomePessoa;
     }
 
     public String getSobrenomePessoa() {
         return sobrenomePessoa;
     }
 
     public void setSobrenomePessoa(String sobrenomePessoa) {
         this.sobrenomePessoa = sobrenomePessoa;
     }
     
 }

Pessoa.hbm.xml

 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC
         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping>
     <class name="mypackage.Pessoa" table="pessoa">
         <id name="idPessoa" column="ID">
             <generator class="native"/>
         </id>
         <property name="nomePessoa" column="Nome"/>
         <property name="sobrenomePessoa" column="Sobrenome"/>
     </class>
 </hibernate-mapping>

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 name="java:comp/env/hibernate/SessionFactory">
 			
         <property name="connection.driver_class">
             org.gjt.mm.mysql.Driver
         </property>
         <property name="connection.url">
             jdbc:mysql://localhost:3306/curso
         </property>
         <property name="dialect">
             org.hibernate.dialect.MySQLDialect
         </property>
         <property name="show_sql">true</property>
         <property name="connection.username">root</property>
         <property name="connection.password">123456</property>
         <property name="connection.pool_size">10</property>
 		
         <mapping resource="mypackage/Pessoa.hbm.xml"/>
     </session-factory>
 </hibernate-configuration>

PessoaDAO.java

package mypackage;

import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;
import org.hibernate.*;

public class PessoaDAO {
    
    private SessionFactory factory;
    
    public PessoaDAO() throws Exception{
        factory = new Configuration().addClass(Pessoa.class).buildSessionFactory();
    }
    
    public void insert(Pessoa pessoa) throws Exception{
        Session session = factory.openSession();
        Transaction transaction = session.getTransaction();
        transaction.begin();
        session.save(pessoa);
        transaction.commit();
        //session.flush();
        session.close();
        
    }
    
}

Classe TestePessoa.java - Estou utilizando para povar o objeto

public class TestePessoa {
     
     /** Creates a new instance of TestePessoa */
     public TestePessoa() {
     }
     
     public void teste() {
         try {
             Pessoa pessoa = new Pessoa();
             pessoa.setIdPessoa(1);
             pessoa.setNomePessoa("nome");
             pessoa.setSobrenomePessoa("Sobrenome");
 
             PessoaDAO dao = new PessoaDAO();
             dao.insert(pessoa);
  
         } catch(Exception e) {
             e.printStackTrace();
         }
     }
     
 }

A Classe TesteAdiciona.java que estou utilizando para rodar, assim consigo ver os erros.

package mypackage;

public class TesteAdiciona {

 	public static void main(String[] args) {
            TestePessoa testePessoa = new TestePessoa();
            testePessoa.teste();
 	}
 
 }

Quando eu rodo a classe acima os seguintes erros são apresentados:

run-main:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
        at org.hibernate.dialect.DialectFactory.determineDialect(DialectFactory.java:57)
        at org.hibernate.dialect.DialectFactory.buildDialect(DialectFactory.java:39)
        at org.hibernate.cfg.SettingsFactory.determineDialect(SettingsFactory.java:378)
        at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:110)
        at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1881)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1174)
        at mypackage.PessoaDAO.<init>(PessoaDAO.java:17)
        at mypackage.TestePessoa.teste(TestePessoa.java:17)
        at mypackage.TesteAdiciona.main(TesteAdiciona.java:11)
BUILD SUCCESSFUL (total time: 2 seconds)

O meu projeto no Netbeans está da seguinte maneira:

 firsthibernate
...\Web Pages
........\META-INF
........\WEB-INF
...\Web Services
...\Configuration Files
...\Server Resources
...\Source Packages
........\mypackage
.................Pessoa.java
.................Pessoa.hbm.xml
.................PessoaDAO.java
.................TesteAdiciona.java
.................TestePessoa.java
.................hibernate.cfg.xml
...\Test Packages
...\Libraries
...\Test Libraries 

O que eu estou fazendo errado?

Grato pela ajuda de todos.
Wallfox

Apesar de o dialect estar explicito no seu hibernate.cfg.xml, tente passar essas informacoes referente ao banco num arquivo chamado hibernate.properties. Infelizmente eu não sei te dizer o porque, sei apenas que tive esse problema (na realidade ainda estou tendo) e resolvi dessa forma.

Procura na documentacao que existe no site hibernate.org e você achará a forma correta de estruturar seu hibernate.properties.

Quanto ao WARN, o hibernate costuma usar o Log4J como log.

[quote=“kopcheski”]Apesar de o dialect estar explicito no seu hibernate.cfg.xml, tente passar essas informacoes referente ao banco num arquivo chamado hibernate.properties. Infelizmente eu não sei te dizer o porque, sei apenas que tive esse problema (na realidade ainda estou tendo) e resolvi dessa forma.

Procura na documentacao que existe no site hibernate.org e você achará a forma correta de estruturar seu hibernate.properties.

Quanto ao WARN, o hibernate costuma usar o Log4J como log.[/quote]

Olá amigo,

Em que pasta do projeto eu devo colocar o arquivo hibernate.properties ?

Obrigado pela ajuda.
Wallfox

Deixe na raiz do seu projeto, junto ao cfg.xml.

Só, por favor, não tenha mais dúvidas… conheço tanto do hibernate que ainda não consegui fazer meu exemplo rodar. :grin:

Brincadeira… tenha dúvidas… o PJ ta cheio de gente boa. Mas a segunda parte é verdade :sad:

Ah, quanto ao lo4j, salve um arquivo chamado log4j.properties na raiz do seu projeto com este conteúdo:

[code]
log4j.rootLogger=DEBUG, 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[/code]

Deve deseparecer aquele WARN