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:
La estructura del proyecto java es la siguiente: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)
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:
CLASE MessageDefine mi ibjeto mensajehibernate.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
Código:
FICHERO DE MAPEO:Message.hbm.xml, Metadato para la clase Message, define como seran mapeados los objetospackage 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; } }
Código:
CLASE:TestHibernate, se encarga de crear la configuracion, crear la SessionFactory, la Session, la Transaccion y salvar el obj en la bd.<?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>
Código:
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.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(); }
Alguna idea de porque se produce el error? O que puedo hacer para detectar donde esta el problema.