Spring proporciona dos mecanismos que se pueden usar para limitar la obtención de datos.
Proyecciones
Las proyecciones pueden ayudarlo a reducir los datos, recuperados de la base de datos, al establecer qué atributos exactamente desea obtener.
Ejemplo:
@Entity
class Person {
@Id UUID id;
String firstname, lastname;
@OneToOne
Address address;
}
@Entity
static class Address {
@Id UUID id;
String zipCode, city, street;
}
interface NamesOnly {
String getFirstname();
String getLastname();
}
@Repository
interface PersonRepository extends Repository<Person, UUID> {
Collection<NamesOnly> findByLastname(String lastname);
}
Gráfico de entidad
Anotación EntityGraph puede ayudarlo a reducir la cantidad de consultas a la base de datos al establecer exactamente qué entidades relacionadas necesita buscar.
Ejemplo:
@Entity
@NamedEntityGraph(name = "GroupInfo.detail", attributeNodes = @NamedAttributeNode("members"))
public class GroupInfo {
@Id UUID id;
@ManyToMany //default fetch mode is lazy.
List<GroupMember> members = new ArrayList<GroupMember>();
}
@Repository
public interface GroupRepository extends CrudRepository<GroupInfo, String> {
@EntityGraph(value = "GroupInfo.detail", type = EntityGraphType.LOAD)
GroupInfo getByGroupName(String name); //Despite of GroupInfo.members has FetchType = LAZY, it will be fetched because of using EntityGraph
}
Hay dos tipos de EntityGraph :
EntityGraphType.LOAD- se utiliza para especificar un gráfico de entidades, los atributos especificados por los nodos de atributos del gráfico de entidades se tratan comoFetchType.EAGERy los atributos que no se especifican se tratan de acuerdo con suFetchTypeespecificado o predeterminado .EntityGraphType.FETCH- se utiliza para especificar un gráfico de entidades, los atributos especificados por los nodos de atributos del gráfico de entidades se tratan comoFetchType.EAGERy los atributos que no se especifican se tratan comoFetchType.LAZY.
PD: Recuerde también que puede establecer el tipo de búsqueda diferida:@ManyToOne(fetch = FetchType.LAZY) y JPA no obtendrá entidades secundarias cuando se obtengan las principales.