Hibernate 3 - onde colocar o hibernate.cfg.xml em uma app simples?

2 respostas
J
Pessoal, a aplicação abaixo funciona se eu descomentar a configuração "manual" do hibernate.
public class Teste
{    
    public static void main(String[] args)
    {
        //um produto qualquer
        Produto p = new Produto();
        p.setNome("arroz");
        p.setPreco(1.45);
        p.setQuantidade(100);
        
        System.out.println("Produto: "+p);
        
        //inicialização do hibernate
        Configuration cfg = new Configuration().addClass(Produto.class);
     /*   
        cfg.setProperty("hibernate.connection.driver_class", "org.gjt.mm.mysql.Driver");
        cfg.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect");
        cfg.setProperty("hibernate.connection.url", "jdbc:mysql://localhost/testehiber");
        cfg.setProperty("hibernate.connection.username", "testehiber");
        cfg.setProperty("hibernate.connection.password", "testehiber");
       */
        SessionFactory sf = cfg.buildSessionFactory();
        Session sess = sf.openSession();
        
        //gravação do produto no banco
        Transaction t = sess.beginTransaction();
        sess.save(p);
        t.commit();
        
        //fechamento da sessão
        sess.close();
    }    

}
Já tentei colocar o hibernate.cfg.xml no mesmo diretório de Teste e Produto (onde está Produto.hbm.xml, que foi encontrado) e tb já tentei colocar no diretório raiz da app. Nenhum funciona, então eu pergunto, onde fica o hibernate.cfg??? Na documentação ele só indica para apps web, mas e para uma app normal? Eis as msgs de erro:
org.hibernate.HibernateException: The dialect was not set. Set the property hibernate.dialect.
    at org.hibernate.dialect.Dialect.getDialect(Dialect.java:477)
    at org.hibernate.dialect.Dialect.getDialect(Dialect.java:499)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:51)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1505)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1053)
    at exemplohibernatenb4.Teste.main(Teste.java:40)
Exception in thread "main"
Se for de alguma utilidade, eis o hibernate.cfg:
<?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>
        <!-- properties -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost/testehiber</property>        
        <property name="hibernate.connection.username">testehiber</property>
        <property name="hibernate.connection.password">testehiber</property>
                 
         <!-- mapping files -->
        <mapping resource="Produto.hbm.xml"/>
    </session-factory>
</hibernate-configuration>
Agradeço a ajuda.

2 Respostas

J

Galera,
apanhei, apanhei e descobri qual o problema. Vou deixar registrado para o próximo coitado que se deparar com ele… Para usar o hibernate.cfg para configurar, no lugar do

Configuration cfg = new Configuration().addClass(Produto.class);

tem que usar:

Configuration cfg = new Configuration().configure();

Pooooxa… era só isso… quem manda copiar e colar??? :frowning:
Até…

paulopatto
Cara to com esse mesmo problema mas no meu caso não vem adiantando muito esta solução: Vamos lá [Exception]
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.hibernate.HibernateException: The dialect was not set. Set the property hibernate.dialect.
        at org.hibernate.dialect.Dialect.instantiateDialect(Dialect.java:233)
        at org.hibernate.dialect.Dialect.getDialect(Dialect.java:211)
        at org.hibernate.dialect.Dialect.getDialect(Dialect.java:226)
        at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:86)
        at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:61)
        at com.paulopatto.lab.caelum.fj21.HibernateUtil.createDataBase(HibernateUtil.java:36)
        at com.paulopatto.lab.caelum.fj21.modelo.TesteGeraBanco.main(TesteGeraBanco.java:12)
Java Result: 1
[CONFIGURAÇAO]
<?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>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost/lab</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">root</property>

    <property name="hibernate.show_sql">                     true    </property>
    <property name="hibernate.generate_statistics">       true    </property>
    <property name="hibernate.use_sql_comments">      true    </property>

  </session-factory>
</hibernate-configuration>
[Classe UTIL]
package com.paulopatto.lab.caelum.fj21;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class HibernateUtil {
    private static final SessionFactory sessionFactory;
    private static final AnnotationConfiguration cfg;
    static {
        try {
            // Create the SessionFactory from standard (hibernate.cfg.xml) 
            // config file.
            sessionFactory = new Configuration().configure().buildSessionFactory();
            cfg = new AnnotationConfiguration();
        } catch (Throwable ex) {
            // Log the exception. 
            System.err.println("Erro na inicialização da sessionFactory: " + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory()    {return sessionFactory;}
    public static Session getCurrentSession()           {return HibernateUtil.sessionFactory.getCurrentSession();}
    public static Session getSession()                  {return HibernateUtil.sessionFactory.openSession();}
    public static void addClass(Class classname)        {cfg.addAnnotatedClass(classname);}
    public static void createDataBase()                 {new SchemaExport(HibernateUtil.cfg).create(true, true);}
    public static SessionFactory BuildSessionFactory()  {return cfg.buildSessionFactory();}
    
}
[CLASSE ONDE OCORRE A EXCEPTION]
package com.paulopatto.lab.caelum.fj21.modelo;

import com.paulopatto.lab.caelum.fj21.HibernateUtil;
import org.hibernate.Session;

public class TesteGeraBanco {
    public static void main(String[] args){
        Session sessao = HibernateUtil.getSession();
        
        HibernateUtil.addClass(Produto.class);
        HibernateUtil.createDataBase();
       
    }
}
Criado 12 de abril de 2005
Ultima resposta 21 de jan. de 2009
Respostas 2
Participantes 2