Jpa

Galera, bom dia! Estou estudando Java Web e estou com dúvidas sobre o uso de JPA, quando devo usar e o porque?
Desde jpa agradeço!

JPA é um padrão pra persistência em Java. Considerando que na prática está falando sobre usar uma implementação como o Hibernate, particularmente só vejo motivo de usa-lo para sistemas onde realmente tenha opção de escolher vários SGDBs ou aplicações que façam muito uso de cache. Por ser uma ferramenta pesada, é bom evitar se não for necessário. A notícia ruim é que no mercado usam direto, por causa da onda da geração que não gosta de escrever SQL, como se o banco relacional que a aplicação usa não existisse. Então se entrar no mercado Java vai ter que aprender independente de qualquer coisa.

1 curtida

Aaaaaa , acho que já deu uma clareada na minha dúvida, porém vou pesquisar mais… Você indicaria alguma apostila para estudos?
Acho interessante esse contexto de persistência, pois seria uma ‘ferramenta’ para nós, certo? Um problema também que eu tenho, é de como funciona uma persistência, quem cuida, quem pode cuidar, quando eu uso e por ai vai…
Mas agradeço sua resposta, ajudou de verdade !
Desde já, agradeço!

Essa apostila dá um bom direcionamento.

Aaa beleza então… ! Vou me aprofundar mais sobre! Valeu brow :grinning:

isso não é totalmente verdade.

hibernate tem features como lazy loading, second level cache e queries polimorficas que eu não tenho ( ao menos de imediato ) com SQL.

a adoção de hibernate/jpa certamente pode ser ligado, de certa forma, ao fato de que alguns DBAs trabalham com outra perspectiva, no caso não necessariamente com os mesmos objetivos do time de desenvolvimento, o que também impulsiona a adoção de NoSQL.

eu lembro de atrasar features por que os DBAs tinham que validar as minhas queries sendo que muitas delas seriam executadas tipo 1 vez por hora e trazendo poucos resultados, por conta de problemas no passado que nada tinham haver com o projeto onde eu estava. Ai vc se esforça um pouco, coloca tudo no MongoDB e bye-bye atrasos ( e ganha novos problemas ).

esse tipo de problema acontece com mais frequencia em ambientes corporativos por conta da ideia de linha-de-produção. se pensa o desenvolvimento como se pensa a montagem de um veiculo ( e algumas vezes é assim mesmo, por incrivel q pareça ) e então vc tem gente embuida de poder (que precisa fazer alguma coisa pra mostrar q ainda é relevante). quando o core-business da empresa não é TI fica dificil. por outro lado é um bom desafio pq qq melhoria pode ser percebida rapidamente.

1 curtida

Acho que é mais questão de escolha mesmo, outras plataformas de desenvolvimento vivem sem isso tranquilamente. A única coisa que tiro o chapéu pro Hibernate é a questão do multibanco, é uma mão na roda pra quem tem isso como necessidade.

Você deve ter passado por experiência onde algum tipo de aplicação tenha usado lazy com eficiência, talvez aplicação desktop. Mas aplicação via HTTP particularmente ainda não vi eficiência, pois a requisição tem que chegar pronta de qualquer forma pra um client que não tem contato direto com Hibernate. Ficar adiando a obtenção das informações durante o request só vai degradar performance com o famoso N+1 selects. É só um facilitador pra programar orientado a objetos, mas não é eficiente nesse cenário. No final das contas o cara vai ter que usar HQL/Criteria aplicando fetch join pra não ter esse problema, o que descaracteriza o lazy.

Sobre cache, pelo menos nesse mesmo cenário não acho muito eficiente ficar indo a todo momento ler cache no servidor web, que já é um custo. Acho mais eficiente manter o cache onde a informação já se destina e fica disponível pra quem usa, que é no client, podendo até usar websockets se for o caso pra atualizar o cache sem precisar pingar periodicamente no servidor. Websockets é interessante, embora eu não tenha tido a oportunidade de usar, devido pouca necessidade de cache ou atualizações automáticas na tela. Para aplicações desktop client/server onde a aplicação se conecta direto no banco, é um cenário que vejo mais sentido usar cache do hibernate.

Sobre “queries polimorficas”, creio que isso seja uma questão mais particular pra quem segue modelagem orientada a objetos, se não for pode explicar melhor.