O Spring fornece dois mecanismos que podem ser usados para limitar os dados a serem buscados.
Projeções
As projeções podem ajudá-lo a reduzir os dados, recuperados do banco de dados, definindo exatamente quais atributos você deseja buscar.
Exemplo:
@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 entidade
Anotação
EntityGraph pode ajudá-lo a reduzir a quantidade de consultas ao banco de dados, definindo exatamente quais entidades relacionadas você precisa buscar. Exemplo:
@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
}
Existem dois tipos de
EntityGraph :EntityGraphType.LOAD- é usado para especificar um gráfico de entidade, atributos que são especificados por nós de atributo do gráfico de entidade são tratados comoFetchType.EAGERe os atributos que não são especificados são tratados de acordo com seuFetchTypeespecificado ou padrão .EntityGraphType.FETCH- é usado para especificar um gráfico de entidade, atributos que são especificados por nós de atributo do gráfico de entidade são tratados comoFetchType.EAGERe os atributos que não são especificados são tratados comoFetchType.LAZY.
PS: Lembre-se também de que você pode definir o tipo de busca lenta:
@ManyToOne(fetch = FetchType.LAZY) e o JPA não buscará entidades filhas quando o pai estiver sendo buscado.