No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Usar Lazy y Eager al cargar relaciones

10/25
Recursos

Aportes 8

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Si la versión de BD mas reciente de MySQL (8) les marca un error Field “id_customer” doesnt have a default value. al momento de realizar los 2 últimos inserts.
Basta con que ejecuten un sesion de mysql en consola, y escriban:

 SET GLOBAL sql_mode=''

después de eso ya les dejara realizar los inserts;

Para el problema de recursión infinita hay varias soluciones: https://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion

Por lo que entiendo, el LAZY se pone de manera predeterminada en @OneToMany y @ManyToMany porque estos cargan las entidades lo que necesita de más recursos disminuyendo la eficiencia y el rendimiento de las consultas

¡Qué buena explicación sobre cómo funcionan estas dos características! No las conocía, pero reconozco su gran utilidad como valor agregado para mejorar el rendimiento de nuestra aplicación. ¡Gracias!

En Hibernate no existe un modo o una propiedad específica para establecer el **FetchType** en `LAZY` por defecto para todas las relaciones. Sin embargo, se puede lograr algo parecido modificando los modos de recuperación (**FetchMode**) que determinan cómo Hibernate debe cargar las entidades asociadas desde la base de datos. Aquí tienes una breve descripción de cada uno, son 3: 1. SELECT: * **FetchMode.SELECT** (modo de selección) es el valor predeterminado. * Carga las entidades asociadas utilizando consultas adicionales (SELECT) cuando se accede a ellas por primera vez. * Puede generar consultas adicionales (N+1 queries) si se accede a múltiples entidades asociadas. 2. JOIN: * **FetchMode.JOIN** (modo de unión) carga las entidades asociadas utilizando una consulta JOIN en la misma consulta principal. * Evita el problema de N+1 queries, pero puede recuperar datos duplicados. * Útil para relaciones uno a uno o muchos a uno. 3. SUBSLECT: * **FetchMode.SUBSELECT** (modo de subconsulta) también evita el problema de N+1 queries. * Carga todas las entidades asociadas en una subconsulta y las almacena en memoria. * Útil para relaciones uno a muchos (colecciones). En resumen: * SELECT: Consultas adicionales (SELECT) bajo demanda. * JOIN: Consulta JOIN en la misma consulta principal. * SUBSLECT: Subconsulta para cargar todas las entidades asociadas. La propiedad se agrega en el properties y es `spring.jpa.properties.hibernate.default_fetch_mode=(select, join o subselect)`
Tambien podemos utilizar **@JsonManagedReference** y **@JsonBackReference** para evitar los problemas de recursión al serializar con jackson
Ojala se hablara sobre el uso de los DTO ya que en el otro curso de spring por llamarlo solo dominio y el uso del lenguaje en ese curso quedo demasiado confuso, espero exista una clase o curso donde se enseñara correctamente el nombramiento de todo un proyecto mejorando la nomenclatura y aplicando buenas practicas
Muy buena esta clase y qué gran explicación concisa y con ejemplos!