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

Problema en una consulta Hibernate

Estas en el tema de Problema en una consulta Hibernate en el foro de Java en Foros del Web. Buenas tardes amigos. Tengo una consulta que me gustaria compartir, alguno con practica en Hibernate me sabra contestar. Se me presenta el siguiente escenario tengo ...
  #1 (permalink)  
Antiguo 11/08/2011, 14:31
Avatar de titocba  
Fecha de Ingreso: agosto-2008
Ubicación: Cordoba
Mensajes: 256
Antigüedad: 15 años, 8 meses
Puntos: 4
Problema en una consulta Hibernate

Buenas tardes amigos.

Tengo una consulta que me gustaria compartir, alguno con practica en Hibernate me sabra contestar.

Se me presenta el siguiente escenario tengo en mi modelo de datos:

abuelo -> hijos -> nietos

Donde por necesidad de performance el

hijos tiene
one-to-many de nietos con (lazy=true)

Ahora mi problema es que cuando quiero persistir un abuelo se pierden las referencias de los nietos en los hijos osea me pone las relaciones en null.

Alguna ayuda??? probe de mil maneras y no doy con la tecla
  #2 (permalink)  
Antiguo 12/08/2011, 15:00
 
Fecha de Ingreso: noviembre-2010
Ubicación: Tandil
Mensajes: 79
Antigüedad: 13 años, 5 meses
Puntos: 3
Respuesta: Problema en una consulta Hibernate

Hola titocba. Yo conozco 2 formas de hacerlo:

- Forma 1: Modificar manualmente el archivo de mapeo .xml e indicarle lazy = false. Ventaja: Te olvidas del problema porque cuando te trae el abuelo te trae hasta los nietos siempre. Desventajas: Te tenés que acordar siempre de modificar los archivos .xml cada vez que mapeas de nuevo la BD. Va a traer siempre los nietos, aún cuando no los necesites, generando esto un costo adicional de memoria y tiempo.

- Forma 2: A demanda. Cuando levantas el abuelo con "get", luego de traerlo ejecutas la siguiente sentencia:
Código Javascript:
Ver original
  1. Hibernate.initialize(abuelo.getHijos());
Y si esto no alcanzara, agrega otra parecida dentro de un for: para todos los hijos, inicializar los nietos, algo así:
Código Javascript:
Ver original
  1. for (Hijos hijo : abuelo.getHijos())
  2.     Hibernate.initialize(hijo.getNietos());
A mí me parece mejor la forma 2, con initialize(), ya que lo que hace es traerlo cuando realmente lo necesitas y no siempre.
Espero haber sido de ayuda. Suerte !

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 16:30.