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.EAGER
e os atributos que não são especificados são tratados de acordo com seuFetchType
especificado 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.EAGER
e 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.