Para poder inicializar atributos de manera lazy con Hibernate, debemos permitir el byte code enhancement, añadiendo .
Para revisar que se está haciendo, hay que comprobar que en nuestro pom.xml se encuentra el siguiente plugin a nuestro pom.xml:
| Bloque de código | ||
|---|---|---|
| ||
<plugin> <groupId>org.hibernate.orm.tooling</groupId> <artifactId>hibernate-enhance-maven-plugin</artifactId> <version>${hibernate.version}</version> <executions> <execution> <configuration> <failOnError>true</failOnError> <enableLazyInitialization>true</enableLazyInitialization> <enableDirtyTracking>true</enableDirtyTracking> <enableAssociationManagement>true</enableAssociationManagement> <enableExtendedEnhancement>false</enableExtendedEnhancement> </configuration> <goals> <goal>enhance</goal> </goals> </execution> </executions> </plugin> |
Además, en application.properties hay properties comprobar que añadir existe la siguiente línea y añadirla en caso de no estar:
| Bloque de código |
|---|
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true |
...
Como lo habitual es que hagamos las peticiones a base de datos para devolver un JSON con la información, por defecto se intentarán mandar todos los campos del objeto, dando un error. Para seleccionar qué incluir en el JSON, podemos usar las vistas (se explican aquí).
Esto puede ser útil, por ejemplo, en una tabla que se muestren los datos básicos, y al desplegar una fila se muestre un contenido más complejo, que el tamaño que se tenga que transferir sea medianamente grande. Podemos poner el contenido como lazy, de forma que los datos básicos se carguen rápidamente, y al desplegar se haga otra petición para cargar el contenido.