Repaso
English
Spring, JPA y Java WebIntermedioSPR-18

¿Cuál es la diferencia entre el fetching LAZY y EAGER en JPA?

Opciones

  1. LAZY carga al primer acceso; EAGER carga junto con el padre (Opción correcta)
  2. LAZY siempre es más rápido y EAGER siempre más lento
  3. LAZY elimina los datos relacionados y EAGER los guarda
  4. No hay ninguna diferencia entre los dos modos

Respuesta

LAZY carga los datos relacionados solo cuando accedes a ellos por primera vez; EAGER los carga de inmediato junto con el padre

Por qué

Un User puede tener muchos Order. Con EAGER, cargar un usuario también carga todos sus pedidos de inmediato, aunque nunca los uses. Con LAZY, los pedidos se cargan de la base de datos solo cuando llamas por primera vez a user.getOrders().

Valores por defecto: @OneToMany es LAZY, @ManyToOne es EAGER.

LAZY evita cargar de más, pero acceder a un campo lazy después de cerrar la sesión o transacción lanza LazyInitializationException. Una recomendación común es usar LAZY y traer lo necesario de forma explícita (JOIN FETCH o @EntityGraph).

Recuerda

Prefiere LAZY y trae explícitamente lo que necesite cada caso de uso.

Términos clave

Practica esta pregunta en Repaso