10

¿Cómo desactivo la carga diferida en Hibernate? Estoy usando anotaciones de persistencia, no un archivo hbm xml.Deshabilitar la carga diferida en Hibernate

Estoy obteniendo un solo objeto por ID y quiero que se carguen todas las propiedades. La sesión se cierra antes de usar el objeto.

Gracias!

+0

Mi Además de esta pregunta: ¿Cómo puedo desactivar la carga diferida de manera que en lugar de servidores proxy, aparecerían colecciones vacías? –

Respuesta

5

necesita anotar las propiedades que desee no perezoso cargado con FetchType.EAGER

@ManyToOne(fetch = FetchType.EAGER) 

Ves, no es el objeto que va a cargar es cargado ligeramente. Más bien, las asociaciones de ese objeto son flojas, y necesitas decirles que no lo sean si ese es tu comportamiento deseado.

Si esos objetos también tienen asociaciones que desea cargar con entusiasmo, necesita anotarlas también.

1

Podría especificar fetch = FetchType.EAGER en todas sus asociaciones, de forma recursiva, pero esto sería cargar un montón de datos que probablemente no le interesa.

Por lo general es una mejor solución para al menos dejar que todas las asociaciones uno a muchos y muchos a muchos a LAZY (que es el valor predeterminado) e inicialícelos antes de cerrar la sesión si su caso de uso los necesita (o incluso cárguelos con una consulta ad-hoc).

Las asociaciones OneToOne y ManyToOne son EAGER de forma predeterminada, y esto ya genera a menudo demasiadas solicitudes. Normalmente prefiero marcar todo como flojo, a menos que todos los casos de uso necesiten buscar la asociación.

Cuestiones relacionadas