2010-10-05 29 views
14

He creado una clase en la que he configurado algunos de sus campos (otras entidades) para que sean cargables LAZY. Ahora necesito usar este objeto después de que se haya desconectado de la sesión, así que obviamente necesito asegurarme de que todos los campos que necesito se llenen antes de separarlo. Intenté simplemente llamar a los buscadores a estos campos flojos, pero eso no pareció funcionar. Alguien tiene una idea de cómo forzar estos campos para ser cargados?Carga diferida de Hibernate en objetos separados

+0

¿está seguro de que su sesión está abierta durante la llamada a getters? –

+0

Sesión si definitivamente abierto cuando llamo a los getters –

Respuesta

11
Hibernate.initialize(yourObject) 

forzará-inicializará el objeto/colección que se le pasa. Necesitas una sesión activa para esto.

Si la entidad está separada, tendría que volver a conectar el objeto (usando merge(..)) a una sesión activa y luego inicializarlo.

+0

+1 Bozho ......... –

+1

'merge' es solo para algunos casos muy especiales. Como regla general recomiendo 'update' – pakore

+0

@pakore - bueno, la diferencia creo que' merge (..) 'también puede insertar un nuevo registro. Pero estoy más acostumbrado a la semántica de JPA, por lo que podría ser un poco diferente aquí. – Bozho

3

Puede volver a adjuntarlo a la sesión. Esta es la forma normal.

session.update(yourObject); //This reattachs the object to the current session. 
yourObject.someGetter(); //This will work now. 
1

sé que le ha pedido Hibernate pero EclipseLink tiene esta función, por lo que valdría la pena echarle un vistazo si está utilizando JPA y no atado a una implementación dada. Usted podría encontrarse con otros problemas que migran a EclipseLink aunque ..

2
<prop key="hibernate.enable_lazy_load_no_trans">true</prop> 

puede agregar esta línea en el archivo de configuración, se puede recuperar sus objetos perezosos incluso se separa, pero debe ser el uso posterior a la versión 4.1.7 ya que hay algún problema de pérdida de conexión con la versión anterior. Consulte here

Cuestiones relacionadas