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="pessoas.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;

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();
        session.save(pessoa);
        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();
        }
    }
    
}

Página index.jsp - onde eu tento chamar a classe TestePessoa para povoar

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ page import="mypackage.*" %>

<% 
   TestePessoa testePessoa = new TestePessoa();
   testePessoa.teste();
%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>

    <h1>Teste</h1>
    
    </body>
</html>

Então pessoal, eu já coloquei todos os arquivos necessários no Lib. Não sei se estou no caminho correto, se eu não estiver, por favor, me falem.
O problema é que ao executar não é exibida nenhuma mensagem de erro, porém nada é inserido. Não tenho idéia de onde olhar para encontar o problema.

Grato pela ajuda de todos.
Wallfox

Olá amigo…

Se a propriedade autocommit no hibertante estiver setada para false, vc deverá utilizar Transaction.

Segue o código como ficaria

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;
 
 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.close();
         
     }
     
 }

Coloque essa tag no seu hibernate.cfg , ela mostra no console o SQL , talvez mostre o erro da inserção:

      &lt;property name="show_sql"&gt;true&lt;/property&gt;

Olá pessoal,

Eu fiz as 2 coisas que vocês pediram, porem ainda não consegui inserir, o pior é que não aparece nenhum erro. Oq será que estou fazendo errado?
Existe alguma maneira de visualizar um log… ou mudar a lógica para exibir o erro?

Grato.
Wallfox

Tente chamar isso através de uma class ao invés de um .jsp

Não sei com funciona no Netbeans, mas deve ter uma opção de rodar/debugar como Java Application dai você verá os logs

public class TesteAdiciona {

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

}

Vc acrescentou a tag que pedi ? , o que apareceu no console ?

[quote=Wallfox]Olá pessoal,

Eu fiz as 2 coisas que vocês pediram, porem ainda não consegui inserir, o pior é que não aparece nenhum erro. Oq será que estou fazendo errado?
Existe alguma maneira de visualizar um log… ou mudar a lógica para exibir o erro?

Grato.
Wallfox [/quote]

[quote=ramilani12]Vc acrescentou a tag que pedi ? , o que apareceu no console ?

[quote=Wallfox]Olá pessoal,

Eu fiz as 2 coisas que vocês pediram, porem ainda não consegui inserir, o pior é que não aparece nenhum erro. Oq será que estou fazendo errado?
Existe alguma maneira de visualizar um log… ou mudar a lógica para exibir o erro?

Grato.
Wallfox [/quote][/quote]

Amigo,

Coloquei a Tag sim, no próximo post eu vou colocar o erro, pois pode servir para responder os 2 posts acima.

Obrigado pela ajuda.
Wallfox

Pessoal,

Agora estou chamando atravéz da classe TesteAdiciona.java como vcs sugeriram, o erro ou os erros seguem abaixo:

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)

Quantos erros não?

Grato pela ajuda de todos!
Wallfox

Acho que ele não está encontrando o arquivo de configuração do Hibernate hibernate.cfg.xml

Em que diretório tú colocou ele?

[quote=macfly2500]Acho que ele não está encontrando o arquivo de configuração do Hibernate hibernate.cfg.xml

Em que diretório tú colocou ele?

[/quote]

Coloquei o arquivo hibernate.cfg.xml dentro de Web pages/WEB-INF/ Isso no projeto do Netbeans. Em que local é o correto?

Grato.
Wallfox

Tente colocar ele em outros diretórios Web pages/WEB-INF/classes, por exemplo, no raiz, etc…

Olá amigo,

Eu coloquei em outros diretórios no projeto Netbeans, porém o erro foi o mesmo.

Grato
Wallfox

Pega o arquivo hibernate.properties que veio junto com a distribuição do Hibernate abra ele e modifique configurando para o seu caso (drivers, Dialect,etc) coloque ele Web pages/WEB-INF/classes e teste se não fungar mesmo assim, dai não sei não oque pode ser.

Olha e melhor vc colocar o hibernate.cfg.xml , na raiz do seu projeto e outra vc adicionou o log4j.jar ?

firsthibernate
…\Web Pages
…\META-INF
…\WEB-INF
…\Web Services
…\Configuration Files
…\Server Resources
…\Source Packages
…\mypackage
…\Test Packages
…\Libraries
…\Test Libraries

Qual pasta que eu deveria colocar o hibernate.cfg.xml ?

Grato
Wallfox