0%
Introdução ao JPA e ao Hibernate

Introdução

Mapeamento objeto-relacional, especificação versus implementação e a armadilha das N+1 consultas.

15-20 min

Introdução ao JPA e ao Hibernate

Um banco de dados relacional raciocina em linhas, colunas e chaves estrangeiras. Um programa Java raciocina em objetos, referências e herança. Esses dois modelos não se sobrepõem: uma referência Java é um ponteiro na memória, uma chave estrangeira é um valor copiado; um objeto Java pode herdar, uma tabela não pode. Essa diferença tem nome, object-relational impedance mismatch, e todo o trabalho que você fazia à mão com JDBC — copiar colunas para campos, reencontrar um objeto já carregado para não duplicá-lo, decidir quando escrever — consiste em superá-la.

O JPA é a resposta padronizada da plataforma Jakarta EE para esse problema. O Hibernate é a implementação mais difundida e, de longe, a mais antiga: o Hibernate existia antes do JPA, e o JPA foi em grande parte desenhado a partir dele. O resultado, para você, é um ORM que permite escrever commande.getClient().getNom() em vez de uma junção, e que decide sozinho o momento em que o UPDATE é enviado ao PostgreSQL.

É justamente essa delegação que torna o assunto difícil. Um ORM não elimina o SQL, ele o produz no seu lugar. No dia em que uma página que exibia cinquenta pedidos emitir cinquenta e uma consultas em vez de duas, o problema não estará no seu código: estará em uma decisão que o Hibernate tomou, a partir de anotações que você escreveu sem medir o efeito. Este curso é construído em torno desse cenário, chamado de problema das N+1 consultas. Ele aparece já nesta lição, acontece diante dos seus olhos na lição sobre relacionamentos e é resolvido de forma adequada na lição de otimização.

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!