Problemas com Hibernate Annotations

4 respostas
gustavodelgado

Tenho um sisteminha utilizando hibernate, porém com hbm.xml e gostaria de utilizar annotations.
O problema é quando tento modificar a minha classe “HibernateUtil”, que está assim:

public class HibernateUtil {
    
    private static SessionFactory sessionFactory;
    static {
        try {
            sessionFactory = new AnnotationConfiguration().buildSessionFactory();
            //sessionFactory = new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
// Log exception!
            throw new ExceptionInInitializerError(ex);
        }

        
         
    }
    public static Session getSession()
    throws HibernateException {
        return sessionFactory.openSession();
    }
       

}

Quando deixo a linha abaixo dessa maneira, dá erro:
sessionFactory = new AnnotationConfiguration).buildSessionFactory();

Se eu deixá-la da forma antiga, ele funciona com os hbm.xml:
sessionFactory = new Configuration().configure().buildSessionFactory();

A impressão que tive é que quando mudo esta linha, ele não encontra mais o arquivo “hibernate.cfg.xml”. O erro é o seguinte:

[b]

Exception in thread “main” java.lang.ExceptionInInitializerError

at br.com.progov.hibernate.HibernateUtil.(HibernateUtil.java:30)

at br.com.progov.dao.hibernateimpl.GenericoDAOHibernateImpl.selectById(GenericoDAOHibernateImpl.java:80)

at testes.SetorPersistencia.main(SetorPersistencia.java:11)

Caused by: 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:1859)

at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1152)

at br.com.progov.hibernate.HibernateUtil.(HibernateUtil.java:26)

… 2 more

Java Result: 1

[/b]

O que poderia ser??

4 Respostas

_fs

Caused by: org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
?

gustavodelgado

LIPE:
Caused by: org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
?

Sim!! Parece que ele não encontra o hibernate.hbm.xml. Se eu colocar o arquivo hibernate.properties, o erro já muda… ele não encontra a classe mapeada. Tem como eu mapear as classes (beans) pelo hibernate.properties?? Meu hbm.xml está assim:

<?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/des_progov?autoReconnect=true</property>
        <property name="hibernate.connection.username">pg_intranet</property>
        <property name="hibernate.connection.password">i9n8t7</property>-->

        <!-- Condiguração do c3p0 -->
        <property name="hibernate.c3p0.max_size">10</property>
        <property name="hibernate.c3p0.min_size">2</property>
        <property name="hibernate.c3p0.timeout">5000</property>
        <property name="hibernate.c3p0.max_statements">10</property>
        <property name="hibernate.c3p0.idle_test_period">3000</property>
        <property name="hibernate.c3p0.acquire_increment">2</property>
        
        <!-- Configurações de debug -->
        <property name="show_sql">true</property>
        <property name="hibernate.generate_statistics">true</property>
        <property name="hibernate.use_sql_comments">true</property>
                
        <mapping class="testes.Contato"/>

    </session-factory>
</hibernate-configuration>
urubatan

não é que não encontra, olha a diferença das duas linhas:

sessionFactory = new AnnotationConfiguration().buildSessionFactory(); //sessionFactory = new Configuration().configure().buildSessionFactory();

quem sabe se tu tentar:

sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); //sessionFactory = new Configuration().configure().buildSessionFactory();

gustavodelgado

Realmente Urubatan… é que eu tinha visto no site do hibernate (em http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/) a linha dessa forma…

Bom, agora que mudei, tenho outro problema:

[b]

Exception in thread “main” java.lang.ExceptionInInitializerError

at br.com.progov.hibernate.HibernateUtil.(HibernateUtil.java:22)

at testes.HibernateTeste.main(HibernateTeste.java:17)

Caused by: org.hibernate.MappingException: invalid configuration

at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1347)

at org.hibernate.cfg.Configuration.configure(Configuration.java:1288)

at org.hibernate.cfg.Configuration.configure(Configuration.java:1274)

at br.com.progov.hibernate.HibernateUtil.(HibernateUtil.java:17)

… 1 more

Caused by: org.xml.sax.SAXParseException: The content of element type “session-factory” must match “(property*,mapping*,(class-cache|collection-cache)<em>,event</em>,listener*)”.

at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)

at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)

at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)

at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)

at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(Unknown Source)

at org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(Unknown Source)

at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)

at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)

at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)

at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)

at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)

at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)

at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)

at org.dom4j.io.SAXReader.read(SAXReader.java:465)

at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1344)

… 4 more

[/b]

Devo estar cometendo algum erro besta, mas tá difícil descobrir hein… rs
Estou tentando com uma classe de teste (que copiei de outro tópico aqui), que está mapeada assim:

package testes;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;


 
@Entity
public class Contato implements Serializable{
 	
 	private Long id;
 	private String nome;
 	private String email;
 	private String endereco;
 	
 	public Contato() {}
 
 	@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
 	public Long getId() {
 		return id;
 	}
 
 	public void setId(Long id) {
 		this.id = id;
 	}
 

        public String getNome() {
 		return nome;
 	}
 
 	public void setNome(String nome) {
 		this.nome = nome;
 	}
 	

        public String getEmail() {
 		return email;
 	}
 
 	public void setEmail(String email) {
 		this.email = email;
 	}
 

        public String getEndereco() {
 		return endereco;
 	}
 
 	public void setEndereco(String endereco) {
 		this.endereco = endereco;
 	}
 }

E por fim, a classe HibernateTeste:

package testes;

import br.com.progov.hibernate.HibernateUtil;
import org.hibernate.HibernateException;
import org.hibernate.Session;


 
 public class HibernateTeste {
 	
 	public static void main(String[] args) {
 		try {
 			Contato contato = new Contato();
 			contato.setNome("teste hibernate");
 			
 			Session session = HibernateUtil.getSession();
 			session.beginTransaction();
 			
 			session.save(contato);
 			session.getTransaction().commit();
 			
 			System.out.println("Gravado contato: " + contato.getId());
 			
 		} catch (HibernateException e) {
 			e.printStackTrace();
 		}
 	}
 }
Criado 22 de novembro de 2006
Ultima resposta 23 de nov. de 2006
Respostas 4
Participantes 3