Hola, aun sigo sin poder hacer mi primera query en HQL con Hibernate, no pensé que fuera tan endiabladamente complicado configurar esto... Supongo que cuando logre ejecutar la primera query todo irá sobre ruedas, pero esto ya me está superando... nunca me había costado tanto configurar un framework y dar tantas vueltas.
Bueno, éste es el hibernate.cfg.xml:
Código XML:
Ver original<?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:3306/mibasededatos</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">12345</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
<mapping resource="persona.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Éste es el mapping del bean (no pongo el bean, todos los datos son String excepto la clave que es Long):
Código XML:
Ver original<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.myapp.struts.ConsultarDatosUsuarioHibernate" table="persona">
<id name="id" column="id" type="java.lang.Long">
<generator class="native"/>
</id>
<property name="nombre" column="nombre" type="java.lang.String"/>
<property name="apellido1" column="apellido1" type="java.lang.String"/>
<property name="apellido2" column="apellido2" type="java.lang.String"/>
<property name="correo" column="email" type="java.lang.String"/>
<property name="usuario" column="username" type="java.lang.String"/>
<property name="telefono" column="telefono" type="java.lang.String"/>
<property name="password" column="password" type="java.lang.String"/>
<property name="rol" column="rolid" type="java.lang.String"/>
</class>
</hibernate-mapping>
Esto es el fragmento de la clase donde se invoca la query (la más simple, como veis):
Código Java:
Ver originalBasicConfigurator.configure();
Logger.getLogger("org.hibernate").setLevel(Level.WARN);
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Query query = session.createQuery("from persona");
List<ConsultarDatosUsuarioHibernate> result = query.list();
session.getTransaction().commit();
Y ésta la pila de errores:
Código Apache:
Ver originalorg.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:2223)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
Etc.
Alguna idea? Estoy por tirar el portátil por la ventana :D
Mis sospechas van por dos sitios:
1. O hay incompatibilidad de tipos entre el mapping y la tabla de MySql (no debería, son todos varchar excepto la clave que es integer)...
2. O es que aun no he efectuado ningún "insert" propiamente dicho con HQL, aunque sí lo he hecho a mano, es decir, que datos en la tabla hay, lo que quiero es sacarlos de la misma. No creo que esta opción tenga mucho sentido, ya que hablamos del modelo objeto-relacional, es decir si hay datos en la tabla debería sacarlos, me inclino más por la de arriba aunque tampoco estoy muy convencido.
Gracias como siempre!