Ver Mensaje Individual
  #2 (permalink)  
Antiguo 12/06/2012, 13:13
Avatar de chuidiang
chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Hibernate y carga de objetos relacionados

Hola:

Depende de la aplicación y lo que vayas a hacer con todo eso. Lo normal es dejarlo en lazy de forma que no te traiga todo por defecto (puedes llenar la memoria si tienes muchos datos y te descuidas).

Luego, cuando vayas a hacer una consulta concreta, decides si necesitas traerte todos los elementos de la relación o no y antes de cerrar la sesión los traes (basta con acceder a la lista de item relacionados para que hibernate la traiga), luego ya puedes cerrar la sesión sabiendo que esos datos están cargados. No sé si el exactamente así, pero sería algo como esto

crear sesion
maquina = sesion.consulta maquinas
maginas.getReparaciones().size() // esto inicializa la lista de reparaciones
sesion close

Echa un ojo también a http://docs.jboss.org/hibernate/orm/...rformance.html donde dice que Hibernate..initialize( maquina.getReparaciones() ) hace lo mismo pero queda el código un poco más claro (deja claro que es una inicialización y no una línea que aparentemente no hace nada).

La otra opcíon si controlas de base de datos, join y demás, es posible hacer la consulta concreta de forma que te traiga los elementos ("forzando" el eager aunque sea lazy por defecto), por ejemplo, si usas HQL, puede ser como esto (join fetch)

List list = session.createQuery(
"select c from Customer c left join fetch c.orders o " +
"left join fetch o.paymentMethod p").list();

o bien con la api de criteria en vez de HQL

List list = session.createCriteria(Customer.class)
.setFetchMode("orders", FetchMode.JOIN).list();

He sacado ambos trozos de código de aquí http://www.basilv.com/psd/blog/2008/...g-in-hibernate

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Última edición por chuidiang; 12/06/2012 a las 13:32