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

Problema con Hibernate

Estas en el tema de Problema con Hibernate en el foro de Java en Foros del Web. Buenos días, os pongo este post porque tengo un problema con hibernate (usándolo con netbeans). Como bien ya sabréis, los pasos para crear una relación ...
  #1 (permalink)  
Antiguo 15/09/2010, 03:37
 
Fecha de Ingreso: septiembre-2010
Mensajes: 6
Antigüedad: 14 años, 2 meses
Puntos: 0
Exclamación Problema con Hibernate

Buenos días, os pongo este post porque tengo un problema con hibernate (usándolo con netbeans). Como bien ya sabréis, los pasos para crear una relación entre tablas y objetos, es crear el fichero de configuración "hibernate.cfg.xml", después creamos el fichero "hibernate.reveng.xml" y después creamos los POJOS. Las clases que representan las tablas. Hasta ahí todo correcto. Efectúo una consulta, y lo recojo en una lista de "miObjetos", es decir algo así como... List<ObjetoBBDD> listaClaves=(List<ObjetoBBDD>) session.createQuery("from ...").list(). El problema me surge justo ahora. Cuando por ejemplo intento recorrer esa lista para mostrar los valores de los atributos, se me presenta un problema, y es que todos los valores se muestran bien, salvo los valores que se corresponden con un "foreign key". Ese campo de un "foreign key" (representado por el tipo de Objeto concreto de la clave ajena a la que apunta) está vacío (lo sé porque se ve en el debug), y cuando intento imprimirlo y llamar a una función de obtención, me salta una excepción de "no lazy - no proxy". Por lo que parece ser, es como si me faltara algo en el fichero de configuración, para que de alguna forma, cuando haga una consulta, que cuando tenga un campo que apunte a una tabla ajena, que obtenga su valor y no lo deje vacío (Para que por ejemplo, cuando se haga instanciaTablaPrincipal.getInstanciaTablaAjena().g etValorAtributo() no salte esa excepción). Decir que estoy usando como base de datos firebird 1.5 y la última versión de hibernate con netbeans.
  #2 (permalink)  
Antiguo 15/09/2010, 04:17
 
Fecha de Ingreso: abril-2007
Mensajes: 54
Antigüedad: 17 años, 7 meses
Puntos: 1
Respuesta: Problema con Hibernate

Tal como lo tenemos montado aqui. En las clases pojo hacemos referencia a las foreign keys (te ahorras todo el tema de joins)

EJEMPLO:

CLASE POJO
public class PAJARITOS extends BaseVO {

private PAJARITOSIdVO id; (REFERENCIA A OTRA CLASE con las primary keys)

private COMIDAVO COMIDA; (REFERENCIA A OTRA CLASE con las foreigkeys)



CONSULTA y ACCESO A DATOS:

<bean parent="baseHibernateAdapter">
<property name="hql">
<value>
FROM
X..VO.PAJARITOS VO AS ve WHERE 1=1 AND ve.tipus =2 AND ve.id.NExpedient = '[num_expediente]'


Aqui puedes poner por ejemplo ve.COMIDAVO. (campo de dentro de COMIDAVO)
  #3 (permalink)  
Antiguo 15/09/2010, 04:19
 
Fecha de Ingreso: septiembre-2010
Mensajes: 6
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Problema con Hibernate

Si, de hecho es así como lo hago, pero cuando llamo al get que representa al pojo de la foreign key, me salta el error de GRAVE: could not initialize proxy - no Session
  #4 (permalink)  
Antiguo 15/09/2010, 04:39
 
Fecha de Ingreso: septiembre-2010
Mensajes: 6
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Problema con Hibernate

Vale, acabo de hacer algo que ha hecho que funcione. Por lo que parece ser, si hago simplemente la siguiente consulta "from TablaPrincipal" en HQL e intento acceder al campo que hace referencia a otra tabla, NO funciona (al resto de campos si) y aparece el mensaje que he descrito anteriormente (could not initialize proxy - no Session). En cambio, si hago la consulta "from TablaAgena" y luego hago la consulta "from TablaPrincipal", cuando intento acceder al campo que de la tabla principal que hace referencia a la tabla agena, sí funciona. Así pues, la pregunta que me formulo ahora es... ¿hay alguna posibilidad, de que simplemente haciendo la consulta "from TablaPrincipal", automáticamente recoja los datos de la tabla agena sin necesidad de hacer la operación "from TablaAgena" antes?
  #5 (permalink)  
Antiguo 15/09/2010, 05:31
 
Fecha de Ingreso: abril-2007
Mensajes: 54
Antigüedad: 17 años, 7 meses
Puntos: 1
Respuesta: Problema con Hibernate

yo tio, en principio mientras todas las tablas esten relacionadas en el VO....solo me basta una select. En la base de datos, obviamente tambien han de estar relacionadaS.

No te compliques mucho, intenta hacer las cosas faciles.


Por ejemplo

TABLA BOSQUE

TABLA ANIMALES

TABLA COMIDAS


En BOSQUEVO, añadir referencia a ANIMALVO

y que en ANIMALVO esteotra referencia a COMIDASVO


sea como sea, tu recuperando todo el objeto BOSQUE, tienes todas las referencias ahi metidas y puedes sacar la comida del animal que tu quieras.
  #6 (permalink)  
Antiguo 15/09/2010, 05:38
 
Fecha de Ingreso: julio-2010
Mensajes: 9
Antigüedad: 14 años, 4 meses
Puntos: 1
Respuesta: Problema con Hibernate

Personalmente a mi, me resulta confuso el fichero de configuracion de Hibernate. Probaste usar annotations? nose sobre que version de java estas programando, pero requiere a partir de la 1.5

saludos
  #7 (permalink)  
Antiguo 15/09/2010, 06:00
 
Fecha de Ingreso: septiembre-2010
Mensajes: 6
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Problema con Hibernate

Si, tengo la última versión de hibernate, de java y de netbeans. Mi código es el siguiente:

[I] List<ObjetoBBDD> listaClaves = GestorBBDD.getConceptos("from AdmClaTablaPrincipal");

Object datos[][] = new Object[listaClaves.size()][titulos.length];
int i = 0;
for (ObjetoBBDD o : listaClaves) {
datos[i][0] = ((AdmClaTablaPrincipal) o).getIdPrincipal();
datos[i][1] = ((AdmClaTablaPrincipal) o).getAdmClaConceptos().getConcepto();
datos[i][2] = ((AdmClaTablaPrincipal) o).getDireccion();
datos[i][3] = ((AdmClaTablaPrincipal) o).getNombre();
datos[4] = ((AdmClaTablaPrincipal) o).getClave();
i++;
}


Cuando comento la línea de getConcepto, todo funciona correctamente, en cambio, cuando la dejo sin comentar, me sale el error mencionado anteriormente.

Este es el fichero de configuración


<?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.Fir ebirdDialect</property>
<property name="hibernate.connection.driver_class">org.fireb irdsql.jdbc.FBDriver</property>
<property name="hibernate.connection.url">jdbc:firebirdsql:1 92.168.100.1:/g2k2plus/satelites.fdb</property>
<property name="hibernate.connection.username">SYSDBA</property>
<property name="hibernate.connection.password">masterkey</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.current_session_context_class">thr ead</property>
<mapping resource="administracion/bbdd/admcla/AdmClaTablaPrincipal.hbm.xml"/>
<mapping resource="administracion/bbdd/admcla/AdmClaConceptos.hbm.xml"/>
</session-factory>
</hibernate-configuration>



y estos son los dos ficheros xml de las dos tablas. La principal, y a la que hace referencia


<?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">
<!-- Generated 07-sep-2010 13:47:09 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
<class name="administracion.bbdd.admcla.AdmClaConceptos" table="ADM_CLA_CONCEPTOS">
<id name="idConcepto" type="int">
<column name="ID_CONCEPTO"/>
<generator class="assigned"/>
</id>
<property name="concepto" type="string">
<column length="50" name="CONCEPTO" not-null="true" unique="true"/>
</property>
<set inverse="true" name="admClaTablaPrincipals">
<key>
<column name="ID_CONCEPTO" not-null="true"/>
</key>
<one-to-many class="administracion.bbdd.admcla.AdmClaTablaPrinc ipal"/>
</set>
</class>
</hibernate-mapping>


y la principal

<?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">
<!-- Generated 07-sep-2010 13:47:09 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
<class name="administracion.bbdd.admcla.AdmClaTablaPrinci pal" table="ADM_CLA_TABLA_PRINCIPAL">
<id name="idPrincipal" type="int">
<column name="ID_PRINCIPAL"/>
<generator class="assigned"/>
</id>
<many-to-one class="administracion.bbdd.admcla.AdmClaConceptos" fetch="select" name="admClaConceptos">
<column name="ID_CONCEPTO" not-null="true"/>
</many-to-one>
<property name="direccion" type="string">
<column length="50" name="DIRECCION"/>
</property>
<property name="nombre" type="string">
<column length="50" name="NOMBRE"/>
</property>
<property name="clave" type="string">
<column length="50" name="CLAVE" not-null="true"/>
</property>
</class>
</hibernate-mapping>

Etiquetas: hibernate
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 22:12.