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

Java :: problema hibernate con lazy

Estas en el tema de Java :: problema hibernate con lazy en el foro de Java en Foros del Web. Holas , soy nuevo asi que no supe donde postear esto , no encontre algo con hibernate , y en base de datos no querian ...
  #1 (permalink)  
Antiguo 19/01/2011, 01:12
 
Fecha de Ingreso: enero-2011
Ubicación: lima-peru
Mensajes: 80
Antigüedad: 13 años, 2 meses
Puntos: 4
Exclamación Java :: problema hibernate con lazy

Holas , soy nuevo asi que no supe donde postear esto , no encontre algo con hibernate , y en base de datos no querian codigo ,com loesoty haciendo con java ps.. espero resolver esta duda , estoy usando hibernate para hacer una aplicacion junto a java , para la conexion a una BD , el problema es que al moento de llamar a un registro ( como objeto) , viene con todos sus registros relacionados ( lazy:true) , y estos con sus relacionados , entonces se gastan muchos recursos , pero no voy a trabajar con todos esos objetos , solo quiero al que llame , hay alguna forma de resolverlo ? , me dataeron usar patron proxi , en este caso , el proxy estaria de lado del servidor ? , en este caso , si entendi , sino corrijanme porfavor , el cliente haria las consultas al proxy , y el al servicio en mi servidor , pero el problema persiste soloq ue del aldo del servidor .. esa es mi duda
  #2 (permalink)  
Antiguo 19/01/2011, 07:13
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 13 años, 4 meses
Puntos: 32
Respuesta: Java :: problema hibernate con lazy

Hola:

Si usas hibernate no necesitas preocuparte por el patrón proxy, ya viene implementado en hibernate.
En los mappings de tus objetos busca las relaciones que tengan y añádele lazy="false"
Ejemplo:
Código XML:
Ver original
  1. <hibernate-mapping schema="ejemplo">
  2. <class name="test.Mensaje" table="mensaje">
  3. <many-to-one name="remitente" class="test.Usuario" column="remitente" lazy="false"/>
  4. </class>
  5. </hibernate-mapping>
De esta forma cuando cargues un objeto Mensaje no va a traer al usuario remitente. Solamente lo va a cargar cuando lo accedas.

saludos;

Nup_
  #3 (permalink)  
Antiguo 19/01/2011, 10:34
 
Fecha de Ingreso: enero-2011
Ubicación: lima-peru
Mensajes: 80
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: Java :: problema hibernate con lazy

mmm ya , no entendia bien lo de lazy false , pero ahora si , asi solo traeria a la pimera ilera y no todo el arbol de relacionados , gracias NUp_ .., ahora solo para complementa y hacer mas optima la aplicacion , el atributo fetch , me conviene Selct o Join , entiendo que la diferencia es el numero de consultas , seria mas optimo , varias consultas ( se encolarian ) o una sola ( demoraria por traer mas data ) , o es igual , depende , de que ?
  #4 (permalink)  
Antiguo 19/01/2011, 14:14
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 13 años, 4 meses
Puntos: 32
Respuesta: Java :: problema hibernate con lazy

Depende de varias cosas:

En mi caso uso fetch='join' (implica lazy=false) cuando las entidades q quiero traer de la BD tienen una relación con una única o pocas entidades. Ejemplo: atrticulo-estado_articulo, relaciones 1 a 1, etc.
Pero ten en cuenta q si tu entidad tiene varias relaciones y le pones fetch=join a todas, cuando vayas a traer esa entidad se va a ejecutar en la BD un join inmenso cuyo resultado va a traer muchos valores nulos. Para esos casos es mejor fetch=select y traer los resultados en varias consultas.

Para los casos q mi entidad pueda estar relacionada con cientos o miles de otras entidades lazy=true con fetch=select me ha servido hasta ahora sin problemas.

fetch=select te puede dar problemas si tu aplicación se conecta a un servidor de BD remoto y la latencia de la conexión es muy mala. Pero si tu BD está en la misma PC q tu aplicación o hay una buena conexión: no hay problemas.

FE DE ERRATA: en el post anterior te dije q
Cita:
Iniciado por nup_ Ver Mensaje
Código XML:
Ver original
  1. <many-to-one name="remitente" ... lazy="false"/>
De esta forma cuando cargues un objeto Mensaje no va a traer al usuario remitente. Solamente lo va a cargar cuando lo accedas.
En realidad es al revés lazy=true es la opción que te da ese comportamiento. No se como editar ese mensaje, de hecho no se si se pueda.

Espero haberte ayudado.

saludos;

Nup_

Etiquetas: hibernate, lazy
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 03:07.