Uma analista de dados está implementando uma solução de per...

Próximas questões
Com base no mesmo assunto
Q3874361 Programação
Uma analista de dados está implementando uma solução de persistência de dados para um novo sistema de gerenciamento de documentos utilizando JPA 2.0. Para otimizar o desempenho e evitar o problema N+1, ela precisa garantir que as entidades relacionadas sejam carregadas de forma eficiente. Para carregar as entidades via JPA 2.0 corretamente e mitigar o problema N+1 de forma eficiente, a analista deve:
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Gabarito: C

Fundamento decisivo: A decisão dependia de identificar o mecanismo de JPA 2.0 que mitiga o problema N+1 por carregamento explícito na consulta, isto é, JOIN FETCH, combinado com associação em carregamento adiado.

Tema central: N+1 em JPA 2.0
Análise das alternativas
A
Errada
Incorreta porque deixar @ManyToOne sem estratégia explícita não é medida eficiente contra N+1 e depende do padrão, não do mecanismo pedido.
B
Errada
Incorreta porque consultas JPQL manuais, por si sós, não garantem o carregamento eficiente das relações; faltou o JOIN FETCH.
C
Certa
A alternativa C está correta porque combina carregamento LAZY na associação com JOIN FETCH na JPQL, permitindo trazer a relação na mesma consulta quando necessário e reduzir o N+1.
D
Errada
Incorreta porque EAGER em todos os @ManyToOne não é solução geral para N+1 e pode gerar carregamento excessivo.
E
Errada
Incorreta porque usa anotação não padrão de JPA 2.0 e, além disso, a descrição do efeito não corresponde ao que foi afirmado.
Pegadinha da questão
A confusão estava em trocar o mecanismo decisivo, JOIN FETCH, por soluções aparentes como default de mapeamento, EAGER generalizado, consulta manual vaga ou anotação proprietária.
Dica para questões semelhantes
  • Em questões sobre N+1 em JPA, procure a combinação entre associação em carregamento adiado e uso explícito de JOIN FETCH.
  • Não trate comportamento padrão de mapeamento como solução de otimização.
  • EAGER generalizado não deve ser aceito como resposta universal para desempenho.
  • Em JPA 2.0, desconfie de alternativa baseada em anotação proprietária.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

No JPA, os relacionamentos entre entidades possuem estratégias de carregamento chamadas FetchType. As duas principais são: EAGER(ansioso) que carrega automaticamente a entidade relacionada junto com a principal e LAZY(preguiçoso) que carrega apenas quando o dado for acessado.

OBS: O padrão varia - ManyToOne costuma ser EAGER, enquanto OneToMany é LAZY.

Consultas que utilizam o JOIN FETCH em JPQL. Esse recurso permite um controle sobre exatamente quais associações devem ser carregadas em uma única query.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo