java - multiple - ¿Cuál es la diferencia entre FETCH y LOAD para el gráfico de la entidad de JPA?
jpa inner join multiple tables (1)
Comenzaré respondiendo la segunda parte de tu pregunta.
¿Cuál es la situación específica cuando necesito usar Recuperar y Cargar?
Hay dos formas principales de cargar una entidad en JPA, carga ansiosa y carga lenta . En la carga ansiosa, una entidad se carga inmediatamente en el momento en que se carga su padre. En la carga diferida, una entidad solo se carga cuando se llama un getter real para esa entidad. Las aplicaciones de alto rendimiento tienden a estar sesgadas hacia la carga diferida porque no es muy agradable hacer que el usuario final espere que se cargue una tabla completa, o incluso un grupo de tablas, cuando se inicia la aplicación. Ahora a tu segunda pregunta.
Especifique FETCH
como su estrategia importando javax.persistence.fetchgraph
en el archivo que contiene la entidad. En este caso, todos los atributos especificados en su gráfico de entidad se tratarán como FetchType.EAGER
, y todos los atributos no especificados se tratarán como FetchType.LAZY
. Por otro lado, si especifica LOAD
como su estrategia al importar javax.persistence.loadgraph
, todos los atributos especificados en el gráfico de entidades también son FetchType.EAGER
pero los atributos no especificados usan su tipo especificado o predeterminado si la entidad no especifica nada.
¿Qué opción debo usar si no tengo un requisito específico?
Dicho esto, es poco probable que no tenga un requisito específico. Por lo menos, necesita que su aplicación web funcione rápidamente. Por esta razón, probablemente debas usar la carga lenta. El uso de un gráfico FETCH
es una buena opción porque se establece de forma predeterminada en la carga diferida, excepto en los pocos casos especiales en los que se considera que un atributo debe cargarse ansiosamente.
Aquí hay un enlace a un gran blog que explica todo esto en detalle, junto con muestras de código.
Soy nuevo en JPA y estoy tratando de usar el gráfico de entidades. Y me di cuenta de que cuando recupero datos, necesito especificar qué EntityGraphType quiero usar.
Leí la especificación JPA2.1 pero todavía no estoy seguro de cómo puedo usar estas 2 opciones correctamente ...
La pregunta es...
- ¿Qué opción debo usar si no tengo un requisito específico?
- ¿Cuál es la situación específica cuando necesito usar Recuperar y Cargar?