Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

JDBC OU JPA com Hibernat?

Opa, bom dia.

Tenho uma duvida na questão de jdbc ou jpa.

Se for parar para pensar em melhorara a performance de um sistema, qual fica mais rapido?

Por exemplo se eu tiver um cliente que usa um sistema web que a internet dele não ajuda, e ele tem que fazer um select toda vez para entrar em uma tela, e esse select é feito pelo jdbc, se eu mudar para JPA com hibernat, melhora a rapidez desse select? ou em questão de rapidez a o JPA E JDBC ficam juntos? Existem alguma diferença nesse caso? Obrigado

5 respostas

Olá Michel, tudo bem?

Muita gente acha que o Hibernate pode ser mais lento que o JDBC por conta das queries que ele faz, que pode acontecer alguns problemas, como queries N+1, entre outras coisas.

O Hibernate pode ser igualmente, ou até mais, rápido que o JDBC. O Hibernate facilita muitas coisas para no desenvolvimento, mas, as vezes, não conhecemos alguns pontos em sua API que prejudicam a performance.

Por isso, existem algumas boas práticas a serem seguidas quando utilizamos o Hibernate, por exemplo, deixar alguns atributos como LAZY, utilizar DTOs para pegar somente os dados que queremos do banco entre outros.

A questão é, se for pensar em performance, tanto o Hibernate, quanto o JDBC podem ser considerados equivalentes nesse quesito.

Ah sim, bacana, é que tenho uma aplicação inteira em JDBC, e quero mudar para o JPA com hibernate, e estou nessa duvida na questão de rapidez, vi mesmo que é uma mão na roda usar o hibernate, é muito mais facil pra gente programador implementar ele no sistema, sem conta que não da trabalho nenhum, sobre esse comportamento LAZY, ja ouvi falar, seria o comportamento preguiçoso? Ou seria o EGGER algo assim né? Me corriga se eu estiver errado, mais então o melhor é evitar esse comportamento preguiçoso certo? Obrigado

Opa Michel, tudo bem?

Isso mesmo, o LAZY é o carregamento preguiçoso. Muitos consideram uma boa prática utilizar esse tipo de carregamento. Já que ele não carrega todos os objetos.

O problema desse tipo de carregamento é que ele pode causar o uma exceção, a LazyInitializationException. Mas exsitem formas de resolver esse problema. No curso de JPA da Alura, vemos algumas boas práticas de se trabalhar com o Hibernate e evitar essa exceção.

Algumas pessoas, como o Vlad Mihalcea, dizem que sempre devemos usar o comportamento LAZY para não fazer ocorrer de existirem selects desnecessários no banco. Já que pode ser que um select seja feito para carregar um objeto e este nunca ser usado.

Então na maioria dos casos a gente usa o evento lazy? para não ocorrer uma ida no banco desncessario? Seria isso então? Por exemplo um exemplo pratico se eu entendi, se eu tiver a classe Cliente e depois a Endereco, a classe cliente tem a FK do endereco la dentro certo? No meu caso se eu querer trazer apenas o cliente sem o endereço uso a expressão LAZY? Vou me aprofundar nos cursos aqui, obrigado abraço.

solução!

Isso. Nesse caso, teríamos apenas um cliente. Só se fizéssemos um cliente.getEndereco() seria feito um select para buscar o endereço.

Imagina, abraços :)