Ajuda em 1º Exercício usando Hibernate

3 respostas
W

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

3 Respostas

K

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.

W

“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.

Olá amigo,

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

Obrigado pela ajuda.
Wallfox

K

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:
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

Deve deseparecer aquele WARN

Criado 1 de setembro de 2006
Ultima resposta 1 de set. de 2006
Respostas 3
Participantes 2