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

[SOLUCIONADO] Problema con Hibernate + Mysql

Estas en el tema de Problema con Hibernate + Mysql en el foro de Java en Foros del Web. Hola gente. Tengo un error al ejecutar una consulta "HQL". Primero de todo os presento mi escenario. Mi estructura de archivos es la siguiente: Contenido ...
  #1 (permalink)  
Antiguo 01/06/2015, 11:30
Avatar de Apolo_13  
Fecha de Ingreso: mayo-2015
Mensajes: 40
Antigüedad: 9 años
Puntos: 4
Problema con Hibernate + Mysql

Hola gente. Tengo un error al ejecutar una consulta "HQL".

Primero de todo os presento mi escenario.


Mi estructura de archivos es la siguiente:


Contenido de mi "HibernateUtil.java":
Código Java:
Ver original
  1. import org.hibernate.cfg.AnnotationConfiguration;
  2. import org.hibernate.SessionFactory;
  3.  
  4. /**
  5.  * Hibernate Utility class with a convenient method to get Session Factory
  6.  * object.
  7.  *
  8.  * @author John Doe
  9.  */
  10. public class HibernateUtil {
  11.  
  12.     private static final SessionFactory sessionFactory;
  13.    
  14.     static {
  15.         try {
  16.             // Create the SessionFactory from standard (hibernate.cfg.xml)
  17.             // config file.
  18.             sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
  19.         } catch (Throwable ex) {
  20.             // Log the exception.
  21.             System.err.println("Initial SessionFactory creation failed." + ex);
  22.             throw new ExceptionInInitializerError(ex);
  23.         }
  24.     }
  25.    
  26.     public static SessionFactory getSessionFactory() {
  27.         return sessionFactory;
  28.     }
  29. }

Contenido de mi Hibernate.reveng.xml:
Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd">
  3. <hibernate-reverse-engineering>
  4.   <schema-selection match-catalog="elecciones"/>
  5.   <table-filter match-name="partidos"/>
  6.   <table-filter match-name="personas"/>
  7. </hibernate-reverse-engineering>

Contenido de mi hibernate.cfg.xml:
Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  3. <hibernate-configuration>
  4.   <session-factory>
  5.     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  6.     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  7.     <property name="hibernate.connection.url">jdbc:mysql://localhost/elecciones</property>
  8.     <property name="hibernate.connection.username">root</property>
  9.     <mapping resource="hr/Personas.hbm.xml"/>
  10.     <mapping resource="hr/Partidos.hbm.xml"/>
  11.   </session-factory>
  12. </hibernate-configuration>

Contenido de Partidos.java:
Código Java:
Ver original
  1. package hr;
  2. // Generated 01-jun-2015 18:58:02 by Hibernate Tools 4.3.1
  3.  
  4.  
  5.  
  6. /**
  7.  * Partidos generated by hbm2java
  8.  */
  9. public class Partidos  implements java.io.Serializable {
  10.  
  11.  
  12.      private String partido;
  13.      private Integer presupuesto;
  14.      private String ideologia;
  15.  
  16.     public Partidos() {
  17.     }
  18.  
  19.    
  20.     public Partidos(String partido) {
  21.         this.partido = partido;
  22.     }
  23.     public Partidos(String partido, Integer presupuesto, String ideologia) {
  24.        this.partido = partido;
  25.        this.presupuesto = presupuesto;
  26.        this.ideologia = ideologia;
  27.     }
  28.    
  29.     public String getPartido() {
  30.         return this.partido;
  31.     }
  32.    
  33.     public void setPartido(String partido) {
  34.         this.partido = partido;
  35.     }
  36.     public Integer getPresupuesto() {
  37.         return this.presupuesto;
  38.     }
  39.    
  40.     public void setPresupuesto(Integer presupuesto) {
  41.         this.presupuesto = presupuesto;
  42.     }
  43.     public String getIdeologia() {
  44.         return this.ideologia;
  45.     }
  46.    
  47.     public void setIdeologia(String ideologia) {
  48.         this.ideologia = ideologia;
  49.     }
  50.  
  51.  
  52. }

Contenido de Partidos.hbm.xml:
Código XML:
Ver original
  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  3. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  4. <!-- Generated 01-jun-2015 18:58:02 by Hibernate Tools 4.3.1 -->
  5. <hibernate-mapping>
  6.     <class name="hr.Partidos" table="partidos" catalog="elecciones" optimistic-lock="version">
  7.         <id name="partido" type="string">
  8.             <column name="PARTIDO" length="30" />
  9.             <generator class="assigned" />
  10.         </id>
  11.         <property name="presupuesto" type="java.lang.Integer">
  12.             <column name="PRESUPUESTO" />
  13.         </property>
  14.         <property name="ideologia" type="string">
  15.             <column name="IDEOLOGIA" length="30" />
  16.         </property>
  17.     </class>
  18. </hibernate-mapping>

¿Cuando surge el problema?
Cuando intento ejecutar esta básica consulta HQL.
Código:
from Partidos
Cuando la ejecuto me sale el siguiente error.


Código:
org.hibernate.hql.internal.ast.QuerySyntaxException: Partidos is not mapped [from Partidos]
	at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:96)
	at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:120)
	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:234)
	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
	at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126)
	at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88)
	at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190)
	at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
	at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
	at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1796)
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Partidos is not mapped
	at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:189)
	at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:109)
	at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:95)
	at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:331)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3633)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3522)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:706)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:562)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:299)
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:247)
	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278)
	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206)
	... 9 more

He comprobado y recomprobado los scripts y que todo este correcto. Y me estoy volviendo loco. No tengo mucha experiencia con Hibernate, pero hasta donde llegan mis conocimientos lo que estoy haciendo es correcto. Me vendría bien una ayudita

Muchas gracias de antemano a todos ;)
  #2 (permalink)  
Antiguo 01/06/2015, 13:13
Avatar de Apolo_13  
Fecha de Ingreso: mayo-2015
Mensajes: 40
Antigüedad: 9 años
Puntos: 4
Respuesta: Problema con Hibernate + Mysql

Ya me auto-solucioné probando cosas. Era una chorrada como la mayoría de las cosas.

Tan solo en el "from" del HQL tenia que poner la ruta completa del paquete tal que así:



Código:
from hr.Partidos
Cita:
NOTA: añadí "hr.", que es el nombre del paquete donde esta. ¡En el "from" hay que poner la ruta completa a la clase!!!!
Espero que a otro le sirva esto.

Un saludo!!

Última edición por Apolo_13; 01/06/2015 a las 13:23
  #3 (permalink)  
Antiguo 02/06/2015, 01:57
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 2 meses
Puntos: 78
Respuesta: Problema con Hibernate + Mysql

Hola Apolo_13,
en primer lugar me alegro mucho que hayas encontrado la forma de que te funcione, pero solo comentarte que la solución correcta a tu problema no es lo que comentas, eso es más bien un "parche".

¿Porque te comento esto?
No es habitual ni normal tener que poner todo el package en la consulta HQL. La gracia del HQL es la simplicidad de las consultas mediante objetos.

Un simple "FROM Partidos" debe ser una consulta válida.

¿Porque te sucede esto?
He mirado tu código y no he sabido ver porqué te dice que no tienes mapeada la clase Partidos. Aparentemente todo se ve OK.

Por favor no te tomes mi comentario como algo abrasivo, mi intención es solo informarte de que las consultas HQL por normal general no requieren del package estrictamente. No pienses que eso es lo "correcto" en Hibernate.

Un saludo!!!

Etiquetas: hibernate, mysql, sql, 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




La zona horaria es GMT -6. Ahora son las 19:16.