2012-03-21 18 views

Respuesta

19

Sí.

El atributo lazy dice hibernate cuando para obtener los niños.

El atributo fetch le dice a hibernate cómo obtener los niños.

Cuando dice

La = true atributo perezoso es permitir la carga diferida de los padres y el niño colecciones y lo mismo fetch = "seleccionar" atributo

que es de plano incorrecta. La estrategia de selección de búsqueda NO es lo mismo que desactivar la carga diferida. De hecho, from the documentation

la recuperación por selección: un segundo SELECT se utiliza para recuperar el entidad o colección asociada. A menos que deshabilite explícitamente la recuperación diferida por especificando lazy = "false", esta segunda selección solo se ejecutará cuando acceda a la asociación.

+0

Gracias.Tengo otra duda cuando estoy leyendo recursos diferenciales para la recuperación de Proxy o la búsqueda "sin proxy" se llaman asociación de valor único. ¿Qué es una asociación de un solo valor en hibernación? – user1127214

12

Cuando decimos fetch="select", entonces siempre se disparará consultas separadas para recuperar los objetos de asociación, incluso si es lazy ="false".

Pero cuando decimos lazy ="true", significa que recuperará los objetos de asociación en una consulta por separado, pero no en el momento de cargar el objeto, sino cuando se accede por primera vez a la asociación. Podemos hacerlo diciendo list().size().

Cuando decimos fetch="join" siempre activará una sola consulta para obtener los objetos de asociación de la base de datos.

0

Para resolver n + 1, seleccione el problema para n consultas (relación padre-hijo) en hibernación usamos fetch = "join" en lugar de fetch = "select". Lazy establece si se cargan objetos secundarios mientras se carga el objeto primario. Debes hacer esta configuración, respetando el archivo de mapeo de hibernación de la clase padre. Lazy = true (significa no cargar el elemento secundario) De forma predeterminada, la carga diferida de los objetos secundarios es verdadera .

Cuestiones relacionadas