Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/04/2012, 09:32
Avatar de Kodee
Kodee
 
Fecha de Ingreso: junio-2011
Mensajes: 11
Antigüedad: 12 años, 10 meses
Puntos: 0
Pregunta Hibernate Error(Hibernate Dialect must be explicitly set)

Hola a todos, estoy probando un ejemplo sencillo de hibernate, usando el clasico hola mundo en un aapp java.

El problema que estoy teniendo sucede a la hora de crear la SessionFactory usando mi objeto Configuration.
Basicamente es la excepcion que da titulo a este post.
org.hibernate.HibernateException: Hibernate Dialect must be explicitly set

He buscado ya en internet cual pueden ser las posibles causas que provocan este error en la mayoria de los casos no esta relacionada con el Dialecto que se define en el hibernate.property o en el hibernate.cfg.xml, sino que es lanzada producto que es imposible conectarse a la base de datos sin embargo en mi caso estoy 100% seguro que los parametros especificados son los correctos, porque son ellos los que uso en mi Perspectiva de Base de Datos del Eclipse y me conecto perfectamente.

El stacktrace completo del error es el siguiente:
Código:
Hibernate Dialect must be explicitly set
30/04/2012 10:27:39,836 (TestHibernate): Error:
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:397)
	at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:111)
	at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1928)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1211)
	at execution.TestHibernate.createConfAndGetSessionFactory(TestHibernate.java:60)
	at execution.TestHibernate.execute(TestHibernate.java:36)
	at execution.TestHibernate.main(TestHibernate.java:19) 
La estructura del proyecto java es la siguiente:
Clase1Hibernate
entities
Message.java
Message.hbm.xml
execution
TestHibernate.java
commons-logging.properties
hibernate.properties
log4j.properties
lib
todas las librerias que uso


A continuacion las especificaciones del proyecto:

Fichero hibernate.propertiesDefine las propiedades, para configurar hibernate
Código:
hibernate.connection.driver_class=org.postgresql.Driver
hibernate.connection.url=jdbc:postgresql://127.0.0.1:5432/Clase1Hibernate
hibernate.connection.username=postgres
hibernate.connection.password=postgres
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.use_sql_comments=true
CLASE MessageDefine mi ibjeto mensaje
Código:
package entities;

// Generated 28-abr-2012 12:47:57 by Hibernate Tools 3.3.0.GA

/**
 * Message generated by hbm2java
 */
public class Message implements java.io.Serializable {

	private Integer id;
	private Message nextmessage;
	private String text;

	public Message() {
	}

	public Message(Message nextmessage) {
		this.nextmessage = nextmessage;
	}

	public Message(Message nextmessage, String text) {
		this.nextmessage = nextmessage;
		this.text = text;
	}

	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Message getNextmessage() {
		return this.nextmessage;
	}

	public void setNextmessage(Message nextmessage) {
		this.nextmessage = nextmessage;
	}

	public String getText() {
		return this.text;
	}

	public void setText(String text) {
		this.text = text;
	}

}
FICHERO DE MAPEO:Message.hbm.xml, Metadato para la clase Message, define como seran mapeados los objetos
Código:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 28-abr-2012 12:47:57 by Hibernate Tools 3.3.0.GA -->
<hibernate-mapping>
    <class name="entities.Message" table="message" catalog="hibernate">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <many-to-one name="nextmessage" cascade="all" column="nextmessage"/>
        <property name="text" type="string">
            <column name="text" length="65535" />
        </property>
    </class>
</hibernate-mapping>
CLASE:TestHibernate, se encarga de crear la configuracion, crear la SessionFactory, la Session, la Transaccion y salvar el obj en la bd.
Código:
package execution;
import entities.*;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import org.apache.log4j.Logger;

public class TestHibernate {	
	 private static Logger _logger = Logger.getLogger( TestHibernate.class );
	/**
	   * main
	   */
	public static void main( String[] args )
	  {
	    try
	    {
	      new TestHibernate().execute();
	    }
	    catch ( Exception e )
	    {
	      System.out.println(e.getMessage());
	      _logger.error( "Error:", e );
	    }
	  }
	
	 /**
	   * Método para las pruebas
	   */
	  private void execute() throws Exception
	  {
		  Message message = new Message();
		  message.setText("Hola Mundo");		  
		  	
		  SessionFactory sf = this.createConfAndGetSessionFactory();
		  Session session = sf.openSession();
		  Transaction tx = session.beginTransaction();
		  	session.save(message);
		  tx.commit();
		  session.close();
		  
		  System.out.println( message.getText() );
	  }
	  
	  /**
	   * Devuelve la SessionFactory
	   */ 
	  private SessionFactory createConfAndGetSessionFactory()
	  {
		//usando metodos addResource
		  Configuration cfg = new Configuration();
		  	cfg.addResource("entities/Message.hbm.xml");
		  	cfg.setProperties(System.getProperties());
		  	
		  //usando metodos addResource, para usar este metodo debe
		  //existir el fichero hbm.xml en el mismo pkg de la clase
		  	//cfg.addClass(Message.class);

	  	return cfg.buildSessionFactory();
	  }
Como ven es algo supersencillo sin embargo no me esta funcionado. La excepcion es lanzada en el momento en que se constuye la SessionFactory usando el metodo buildSessionFactory(), añadir tambien que no quiero usar un fichero hibernate.cfg.xml, quiero hacer las configuraciones con un properties solamente, tampoco deseo usar anotaciones sino ficheros xml.

Alguna idea de porque se produce el error? O que puedo hacer para detectar donde esta el problema.

Última edición por Kodee; 30/04/2012 a las 09:45