Bom dia gente.
Estou com um problema um pouco estranho ocorrendo com relação às configurações do hibernate, é o seguinte, estou construindo um teste de aplicação usando hibernate-annotations (com spring 2.0 e jboss 4.0.5), ao iniciar a aplicação, no log do Jboss vejo:
...
11:09:47,890 INFO [XmlBeanDefinitionReader] Loading XML bean definitions from ServletContext resource [/WEB-INF/applicationContext-dao.xml]
11:09:48,093 INFO [XmlBeanDefinitionReader] Loading XML bean definitions from ServletContext resource [/WEB-INF/applicationContext-jdbc.xml]
11:09:48,109 INFO [XmlBeanDefinitionReader] Loading XML bean definitions from ServletContext resource [/WEB-INF/applicationContext-service.xml]
...
11:09:48,593 INFO [DriverManagerDataSource] Loaded JDBC driver: com.mysql.jdbc.Driver
11:09:48,656 INFO [Version] Hibernate Annotations 3.2.0.GA
11:09:48,718 INFO [Environment] Hibernate 3.2.2
11:09:48,734 INFO [Environment] hibernate.properties not found
11:09:48,750 INFO [Environment] Bytecode provider name : cglib
11:09:48,765 INFO [Environment] using JDK 1.4 java.sql.Timestamp handling
11:09:49,046 INFO [Configuration] configuring from url: jndi:/localhost/exemplo/WEB-INF/hibernate.cfg.xml
11:09:49,250 INFO [AnnotationConfiguration] Mapping package br.com.teste.exemplo.beans
11:09:49,375 WARN [AnnotationBinder] Package not found or wo package-info.java: br.com.teste.exemplo.beans
11:09:49,484 INFO [Configuration] Configured SessionFactory: null
11:09:49,500 INFO [LocalSessionFactoryBean] Building new Hibernate SessionFactory
11:09:49,531 INFO [AnnotationBinder] Binding entity from annotated class: br.com.teste.exemplo.beans.Usuario
11:09:49,656 INFO [EntityBinder] Bind entity br.com.teste.exemplo.beans.Usuario on table USUARIO
11:09:50,406 INFO [ConnectionProviderFactory] Initializing connection provider: org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider
11:09:50,687 INFO [SettingsFactory] RDBMS: MySQL, version: 5.0.27-community-nt
11:09:50,687 INFO [SettingsFactory] JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.0.4 ( $Date: 2006-10-19 17:47:48 +0200 (Thu, 19 Oct 2006) $, $Revision: 5908 $ )
11:09:50,750 INFO [Dialect] Using dialect: org.hibernate.dialect.MySQLInnoDBDialect
...
Aparentemente, as configuração foram carregadas normalmente. Tenho uma classe HibernateUtil (nada de especial na classe, só o padrão mesmo... inclusive acho que peguei o exemplo daqui mesmo), que uso para pegar a sessão. Segue:
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new AnnotationConfiguration().buildSessionFactory();
} catch (Throwable ex) {
// Log exception!
throw new ExceptionInInitializerError(ex);
}
}
public static Session getSessionFactory()
throws HibernateException {
return sessionFactory.openSession();
}
}
package org.teste.padrao.dao;
import java.lang.reflect.Field;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.jboss.logging.Logger;
import br.com.teste.exemplo.beans.Usuario;
public class GenericDAO<E>{
private static Logger logger = Logger.getLogger(GenericDAO.class);
private Class persistenClass;
private Session session;
public GenericDAO(){}
public GenericDAO(Class class1){
//this.persistenClass = class1;
this.persistenClass = Usuario.class;
this.session = HibernateUtil.getSessionFactory();
}
/**
* Carrega um elemento pelo seu ID
* */
public E loadById(Integer id){
...
}
/**
* Carrega lista de objetos da classe no banco
* */
@SuppressWarnings("unchecked")
public List<E> list(){
persistenClass = Usuario.class; /*testando. remover depois*/
this.session = HibernateUtil.getSessionFactory();
Field[] classFields = persistenClass.getFields();
/*Criando critério de busca para a classe*/
Criteria criterio = session.createCriteria(persistenClass);
ProjectionList listaPropriedades = Projections.projectionList();
for (Field campo : classFields){
listaPropriedades.add(Projections.property(campo.getName()));
}
criterio.setProjection(listaPropriedades);
return criterio.list();
}
...
}
É... gentileza não reparem um código meio bizarro aí... hehe, to começando a estudar projeções e critérios :lol:
Bom, mas, a questão é que, executando o código, ocorre um erro de que o dialeto não está setado:
11:26:01,687 ERROR [[helpdesk]] Servlet.service() for servlet exemplo threw exception
java.lang.ExceptionInInitializerError
at org.teste.padrao.dao.HibernateUtil.<clinit>(HibernateUtil.java:18)
...
Caused by: org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
O que me deixa confusa, pois, no log aparentemente foram lidas todas as configurações, incluindo o dialeto. Por teste, já tentei remover a chamada HibernateUtil.getSessionFactory() do construtor para o método de listagem, só para ver o que ocorria, mas, a única diferença é a hora em que o erro explode. Ele continua ocorrendo de qq jeito.
Alguém tem noção do por quê esse erro ocorre?
Obrigada.
). Amanhã espero ter tempo para colocar os jars na minha aplicação e testar de novo, para ver o que ocorre…