English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

La diferencia entre carga diferida y carga anticipada en Hibernate

Lazy y Eager son dos estrategias de carga de datos en ORM, por ejemplo, Hibernate y EclipseLink. Cuando una clase de entidad se refiere a otra entidad (por ejemplo, Employee y Phone (teléfono del empleado)), utilizamos estas estrategias de carga de datos. 

Carga diferida-Los datos asociados se cargan solo cuando se llama explícitamente a los métodos getter o size

  • Al usar una colección de uno a muchos, utilice la carga diferida.

  • Cuando esté seguro de que no utiliza la entidad relacionada, utilice la 'carga diferida'. 

Carga Egare-La carga de datos ocurre al obtener su padre

  •  Cuando no haya muchas relaciones, utilice la 'carga apresurada'. Por lo tanto, la carga apresurada es un buen hábito para reducir las consultas adicionales en el servidor.

  • Cuando esté seguro de que desea usar la entidad principal en todas partes, utilice la 'carga apresurada'.

Número de secuenciaClavePerezosoApresurado
1
Estrategia de extracción 
En la carga diferida, los datos asociados se cargan solo cuando se llama explícitamente a los métodos getter o size
En la carga apresurada, la carga de datos ocurre al obtener su padre 
2
Estrategia por defecto en la capa ORM 
Por defecto, las asociaciones ManyToMany y OneToMany utilizan la estrategia de carga diferida.
Por defecto, las asociaciones ManyToOne y OneToOne utilizan la estrategia de carga diferida.
3
Configuración de carga
Se puede activar utilizando el parámetro de comentario:

fetch = FetchType.LAZY 
Se puede activar utilizando el parámetro de comentario:

fetch = FetchType.EAGER
 4
Rendimiento
El tiempo de carga inicial es mucho más corto que el de carga apresurada
Cargar demasiado datos innecesarios puede afectar el rendimiento