Foros del Web » Programación para mayores de 30 ;) » Java »

Hibernate Error(Hibernate Dialect must be explicitly set)

Estas en el tema de Hibernate Error(Hibernate Dialect must be explicitly set) en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 30/04/2012, 09:32
Avatar de Kodee  
Fecha de Ingreso: junio-2011
Mensajes: 11
Antigüedad: 13 años, 5 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
  #2 (permalink)  
Antiguo 03/05/2012, 06:14
Avatar de Kodee  
Fecha de Ingreso: junio-2011
Mensajes: 11
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Hibernate Error(Hibernate Dialect must be explicitly set)

Hasta el momento me fue imposible solucionar el error usando solamente el fichero hibernate.properties.
Me vi forzado a usar la configuracion basica del hibernate.cfg.xml ahora en ves de decir en la clase TestHibernate return cfg.buildSessionFactory(); a la hora de construir la SessionFactory pues digo return cfg.configure().buildSessionFactory();, y es decir tuve que especificar los atributos de la sessionfactory en el xml, pero no era lo que me habia propuesto inicialmente.

Sigo sin entender porque hibernate no se me conecta correctamente a la bd usando solamente el properties aun cuando esta en una de las configuraciones iniciales propuestas por la mayorias de las guias de Hibernate digase: Hibernate in Action, Hibernate References, Deep Analisys of ORM, etc.
  #3 (permalink)  
Antiguo 14/11/2012, 21:19
 
Fecha de Ingreso: noviembre-2012
Ubicación: Argentina
Mensajes: 5
Antigüedad: 12 años
Puntos: 0
Respuesta: Hibernate Error(Hibernate Dialect must be explicitly set)

Buenas Tardes, estoy teniendo un problema bastante especifico.
Les comento a ver si alguien me puede ayudar con esto.

Tengo 3 tablas: Tabla Cliente, Tabla direccion y una tabla de referencia "client_address" que solo tiene 2 campos (IDCliente y IDDireccion)
(la relacion es many to many)

EN uno de los HBM, las mismas estan configuradas asi:
<set name="addresses" table="client_address" lazy="true" cascade="all-delete-orphan" inverse="true" >
<key column="id_client"/>
<many-to-many class="com.asofarma.fm.fe.model.Direccion" column="id_address"/>
</set>

ESTE CODIGO XML LO QUE HACE ES AL HACER UN SAVE DEL OBJETO ES CREAR:
• 1 registro en client_address(tabla intermedia)
• 1 registro en Address(en la tabla maestrs)

Aquí me surge el problema de que a veces en la pantalla necesito realizar una creacion de tabla maestra + tabla de referencia(asociacion) y a veces no, ya que los datos en la maestra ya existian, y solamente tengo que hacer la asociacion(insert en la tabla de referencia)

Tal cual como esta el XML, hibernete me esta insertando 2 registros en los 2 casos:
1 registro en la tabla maestra
1 registro en la tabla de referencia (asociacion el registro creado recientemente)

CASOS:
Tengo casos en los que le CREO "UN DOMICILIO" a un cliente.Al ser un nuevo domicilio estaria bien que se cree un nuevo registro en domicilio y luego otro nuevo registro en la tabla de referencia asociando el domicilio con el cliente.
Tengo otro caso que EL DOMICILIO ya existe, y solamente se lo selecciono al cliente, por lo tanto en la tabla domicilio este ya existe, debiendo solamente registrar la asociacion en la tabla de referencia. (ESTE ULTIMO ES EL QUE NO PUEDO SOLUCIONAR)

Por favor, agradezco alguna orientacion y/o comentarios.

Gracias

Etiquetas: clase, hibernate, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:46.