8
16/01/13 Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes | blog.caelum.com.br blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/?utm_source=Caelum&utm_campaign=342320b013-Newsletter… 1/8 Blog Java Rails Agile Web Design Arquitetura Inovação Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes Postado em 28. jan, 2008 por Paulo Silveira em Java Curtir 76 pessoas curtiram isso. Seja o primeiro entre seus amigos. Tweet Tweet 7 Essa última semana tive a oportunidade de palestrar no RioJUG sobre JPA e Hibernate , onde fui muito bem recebido pelo Guilherme Chapiewski e Magno Cavalcante . Isso ocorreu durante o treinamento de Arquitetura Java que demos para diversos desenvolvedores da Globo.com, e onde tive o prazer de conhecer alguns desenvolvedores e arquitetos, como Vitor Pellegrino , Anselmo Alves, Wesley Silva, Alexandre Gazola, Tiago Motta , entre outros. Também vi o Ettore Luglio e o Daniel Passos. Infelizmente durante a palestra não tive tempo de mostrar muitos recursos avançados e boas práticas do Hibernate, então vou usar este espaço para tal. Precisamos conhecer todo pontencial de qualquer ferramenta, framework ou biblioteca que vamos usar em um projeto. Uma ferramenta boa, sem o devido conhecimento, resulta em projetos atrasados, com problemas de performance e desculpas do tipo “O problema é o [Hibernate|Struts|JSP, insira sua tecnologia aqui...], que gera uma quantidade excessiva de [queries|objetos|scriptlets|...] durante [lazy loading|requisições|...]“. Isso vale em especial para ferramentas mais antigas, como JSP e Struts 1. Hoje em dia ambas possuem recursos poderosos que auxiliam em muito o desenvolvimento, mas alguns desenvolvedores acabam não se aprofundando e desconhecem esses detalhes que podem ser vitais no uso de determinadas tecnologias. Com o Hibernate não é diferente. É muito comum as pessoas culparem o Hibernate pela queda do banco de dados, performance das queries, número de objetos em memória, LazyInitializationException , e outros inúmeros problemas os quais em sua maioria poderiam ter sido evitados com a utilização de alguns recursos, boas práticas e bons hábitos no uso desse framework. Sem mais demora, os 7 hábitos: Connection Pool – Usar o pool de conexões embutido com o Hibernate é um erro comum, e a própria documentação diz que você não deve usa-lo em produção! Pode acontecer até connections leak! A Caelum teve ótimas experiências com o C3P0 , e é muito fácil configurá-lo como Provider para o Hibernate . Second Level Cache – Todos já passamos por situações em que precisamos criar caches para as linhas de banco de dados mais acessadas. Aqui temos diversos problemas: sincronismo, gasto de memória, memory leak, tamanho do cache, política de prioridade da fila (LFU, LRU, FIFO, etc), tempo de expiração e modos de invalidar o cache. Escrever um cache eficiente e seguro é um grande trabalho, imagine ainda dar suporte a um cache distribuído e que possa se aproveitar do disco rígido para não gastar tanta memória? Esse é o papel do second level cache . Você pode usá-lo com diversos providers, sendo o EhCache um dos mais conhecidos. Query Cache – Um recurso fantástico do Hibernate. No caso de você ter queries que são executadas inúmeras vezes, você pode pedir para o Hibernate fazer o cache do resultado desta query. O interessante é que ele não vai armazenar todos os objetos resultantes, e sim apenas suas primary keys: no momento que ele precisar executar novamente aquela query, ele já tem todos os IDs resultantes, e através destes ele consulta o second level cache, sem fazer um único hit ao banco de dados! Esse cache será invalidado quando alguma das tabelas envolvidas nesta query for atualizada, ou um determinado tempo passar. Controle do Lazy – Algumas pessoas costumam reclamar do lazy loading, dizendo que em alguns casos teria sido melhor ele carregar tudo em uma única query. Você sempre pode redefinir o comportamento desses relacionamentos quando fizer uma query, através de um eager fetch . Buscar Caelum | Newsletter | Apostilas | Like 11k Compartilhar 76

Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes _ blog.caelum.com

Embed Size (px)

Citation preview

Page 1: Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes _ blog.caelum.com

16/01/13 Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes | blog.caelum.com.br

blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/?utm_source=Caelum&utm_campaign=342320b013-Newsletter… 1/8

BlogJava

RailsAgile

Web DesignArquiteturaInovação

Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes

Postado em 28. jan, 2008 por Paulo Silveira em Java

Curtir 76 pessoas curtiram isso. Seja o primeiro entre seus amigos.

TweetTweet 7

Essa última semana tive a oportunidade de palestrar no RioJUG sobre JPA e Hibernate, onde fui muito bem recebido pelo Guilherme Chapiewski e Magno

Cavalcante. Isso ocorreu durante o treinamento de Arquitetura Java que demos para diversos desenvolvedores da Globo.com, e onde tive o prazer de conheceralguns desenvolvedores e arquitetos, como Vitor Pellegrino, Anselmo Alves, Wesley Silva, Alexandre Gazola, Tiago Motta, entre outros. Também vi o Ettore Luglioe o Daniel Passos.

Infelizmente durante a palestra não tive tempo de mostrar muitos recursos avançados e boas práticas do Hibernate, então vou usar este espaço para tal.

Precisamos conhecer todo pontencial de qualquer ferramenta, framework ou biblioteca que vamos usar em um projeto. Uma ferramenta boa, sem o devidoconhecimento, resulta em projetos atrasados, com problemas de performance e desculpas do tipo “O problema é o [Hibernate|Struts|JSP, insira sua tecnologia

aqui...], que gera uma quantidade excessiva de [queries|objetos|scriptlets|...] durante [lazy loading|requisições|...]“. Isso vale em especial para ferramentasmais antigas, como JSP e Struts 1. Hoje em dia ambas possuem recursos poderosos que auxiliam em muito o desenvolvimento, mas alguns desenvolvedores acabam

não se aprofundando e desconhecem esses detalhes que podem ser vitais no uso de determinadas tecnologias.

Com o Hibernate não é diferente. É muito comum as pessoas culparem o Hibernate pela queda do banco de dados, performance das queries, número de objetosem memória, LazyInitializationException, e outros inúmeros problemas os quais em sua maioria poderiam ter sido evitados com a utilização de alguns

recursos, boas práticas e bons hábitos no uso desse framework.

Sem mais demora, os 7 hábitos:

Connection Pool – Usar o pool de conexões embutido com o Hibernate é um erro comum, e a própria documentação diz que você não deve usa-lo em produção!

Pode acontecer até connections leak!A Caelum teve ótimas experiências com o C3P0, e é muito fácil configurá-lo como Provider para o Hibernate.

Second Level Cache – Todos já passamos por situações em que precisamos criar caches para as linhas de banco de dados mais acessadas. Aqui temos diversos

problemas: sincronismo, gasto de memória, memory leak, tamanho do cache, política de prioridade da fila (LFU, LRU, FIFO, etc), tempo de expiração e modos deinvalidar o cache. Escrever um cache eficiente e seguro é um grande trabalho, imagine ainda dar suporte a um cache distribuído e que possa se aproveitar do disco

rígido para não gastar tanta memória? Esse é o papel do second level cache. Você pode usá-lo com diversos providers, sendo o EhCache um dos mais conhecidos.

Query Cache – Um recurso fantástico do Hibernate. No caso de você ter queries que são executadas inúmeras vezes, você pode pedir para o Hibernate fazer ocache do resultado desta query. O interessante é que ele não vai armazenar todos os objetos resultantes, e sim apenas suas primary keys: no momento que ele

precisar executar novamente aquela query, ele já tem todos os IDs resultantes, e através destes ele consulta o second level cache, sem fazer um único hit ao bancode dados! Esse cache será invalidado quando alguma das tabelas envolvidas nesta query for atualizada, ou um determinado tempo passar.

Controle do Lazy – Algumas pessoas costumam reclamar do lazy loading, dizendo que em alguns casos teria sido melhor ele carregar tudo em uma única query.Você sempre pode redefinir o comportamento desses relacionamentos quando fizer uma query, através de um eager fetch.

Buscar Caelum | Newsletter | Apostilas |Like 11k

Compartilhar 76

Page 2: Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes _ blog.caelum.com

16/01/13 Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes | blog.caelum.com.br

blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/?utm_source=Caelum&utm_campaign=342320b013-Newsletter… 2/8

Paulo Silveira (Google+)

Mais sobre o autor

Stateless Session – Algumas vezes precisamos fazer um processamento em batch de objetos, ou mesmo inserir uma quantidade grande deles na base de dados.Em muitos casos uma bulk operation é o suficiente, mas se quisermos manter a Orientação a Objetos, devemos tomar cuidado com a grande quantidade de objetos

que ficarão armazenados no first level cache. A StatelessSession resolve esse problema: simplesmente não há first level cache e nenhum objeto se comportará comomanaged, tendo praticamente o mesmo efeito que chamar entityManager.clear() a cada operação.

Open Session in View – Na arquitetura MVC, muitas vezes renderizamos em nossa view diversas entidades do nosso modelo, e essas podem ter sido carregas

pelo Hibernate. Se essas entidades possuem relacionamentos lazy, precisamos que a sessão esteja aberta no momento da renderização da View, caso contrárioteremos uma LazyInitializaionException ou algum código macarrônico para carregar relacionamentos que nem sempre precisamos. Para isso devemos

manter a session aberta através de um filtro, interceptador ou algum outro mecanismo. Isso resulta no pattern Open Session in View e também se aplica aoEntityManager.O mesmo efeito pode ser obtido através de inversão de controle e injeção de dependências através da anotação @PersistenceContext, que é tratada por

containers EJB3 e também por muitos frameworks web, como o Spring. O EJB3 ainda possui o conceito de um contexto de persistência extendido, quem éinteressante em casos de conversações longas: o EntityManager usado será o mesmo enquanto aquele stateful session bean não for removido.

Evitando número de queries excessivas (n+1) – Se uma NotaFiscal possui muitos Items, e essa coleção é lazy, gastaremos duas queries para buscar a

NotaFiscal e seus respectivos Itens. Mas se temos uma lista de NotaFiscal resultante de uma query, para cada NotaFiscal teremos uma nova queryexecutada para todo getItems invocados. 1 query para listar NotaFiscal, N queries para pegar os relacionamentos: é o problema das n+1 queries. Você deve

usar as configurações de batch-size e fetch-size para pedir ao Hibernate carregar as entidades/relacionamentos em blocos em vez de um em um. Vocêtambém pode utilizar o second level cache nesses relacionamentos, diminuindo consideravelmente o número de queries disparada.

Essas são apenas alguns dos hábitos, poderíamos ainda falar sobre o bom tratamento de exceções, o cuidado ao fechar todos os recursos abertos pelo Hibernate, o

uso de queries nativas, o mapeamento de queries nativas para entidades através do ResultTransformer, filtros de coleções, dynamic insert e update, a criação doseu próprio tipo de persistência, e muitos outros. Conhecer bem o capítulo de performance do Hibernate é fundamental além de um bom começo.

Curtir 76 pessoas curtiram isso. Seja o primeiro entre seus amigos.

TweetTweet 7

Tags: cache, eventos, fj-25, hibernate, jpa, LazyInitializationException, persistencia, rio, riojug

39 Respostas para “Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes”

1.

Daniel F. Martins

28. jan, 2008

Excelente post!

2.

cleuber

28. jan, 2008

Só tenho uma dúvida, em relação à primeira recomendação. Não seria melhor usar um pool de conexões provido pelo servidor de aplicação JEE ?

3.

Paulo Silveira

28. jan, 2008

Olá Cleuber!

Tem razão, sem dúvida é mais interessante usar o pool/data source que o servidor disponibilizar. Minhas dicas aqui foram focadas no possível uso stand alonedo hibernate+jpa, tanto que no Open Session in View cito a possibilidade do @PersistenceContext no caso de você se encontrar em um servidor deaplicação.

Dentro de um servidor de aplicação Java EE você terá diversas facilidades e vantagens ao usar a JPA.

Compartilhar

Page 3: Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes _ blog.caelum.com

16/01/13 Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes | blog.caelum.com.br

blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/?utm_source=Caelum&utm_campaign=342320b013-Newsletter… 3/8

4.

Eduardo Bregaida

28. jan, 2008

Show de bola Paulo =)

5.

Tiago Albineli Motta

29. jan, 2008

Muito útil, post pra ser guardado nos favoritos.

6.

Vitor Pellegrino

30. jan, 2008

Grande Paulo!Assim como foi a palestra, este foi um excelente post.

Foi muito bom conhecer a ti e a teu irmão.

Um grande abraço para vocês todos aí da Caelum.

Até a próxima!

7.

Paulo Vitor

05. fev, 2008

A associaão do título do post com o livro “Os 7 hábitos das pessoas altamente eficazes” foi interessante ahuhua (aliás é um livro muito bom)..Queria fazer alguns comentários, que vão ser mais perguntas XD1º – Contexto de persistência extendido seria a mesma idéia da conversasão do webbeans(que se entendi bem, é poder ter o controle sobre entidades

durante N requisições, podendo-se fazer, por exemplo, um cadastro com 5 telas)?

2º – Sobre usar o Query Cache, isso não pode me causar problemas do tipo receber um EntityNotFoundException ao tentar editar um item de uma lista quefoi gerada a partir de uma consulta que utiliza cache?

3º – Quando eu utilizo transaction-type JTA no persistence.xml, pelo que sei, eu to delegando o controle das transações ao container…mas e caso eu queiratratar uma delas(dar um transaction.begin(), comitar, etc)? existe essa possibilidade?

Agradeço a atenção e parabéns pelo post, vou procurar ler sobre Stateless Session, eu sequer imaginava que o Hibernate tinha esse recurso..

8.

Paulo Silveira

06. fev, 2008

ola Paulo Vitor! Excelente perguntas/observacoes!

1. Isso mesmo! É a mesma idéia… e ela também já existia antes no Hibernate, e eles chamavam de Extended Session Pattern for Long Conversations:

http://www.hibernate.org/43.html#A5

2. Nao pode causar esse problema não, pois o hibernate invalida aquela entrada do cache quando ha uma modificacao em alguma linha nas tabelas envolvidasnaquela query

3. Voce pode usar a anotacao @Resource em um atributo do tipo UserTransaction, que o EJB3 container se encarregara de injetar uma transacao para voce

antes da invocacao de metodo, e ai voce faz o controle manual como queira!

abracos

Page 4: Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes _ blog.caelum.com

16/01/13 Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes | blog.caelum.com.br

blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/?utm_source=Caelum&utm_campaign=342320b013-Newsletter… 4/8

9.

Paulo Vitor

06. fev, 2008

Hum, vou testar o @Resource + UserTransaction!

Obrigado pelas explicações Paulo!Ah, e parabéns, o blog tá com um conteúdo bem legal, abraço!

10.

Germano Fronza

12. fev, 2008

Post muitíssimo bom!

Valeu Paulo, este blog é o melhor

11.

Diego Carrion

17. fev, 2008

Muito bom mesmo o post Paulo. Somente falta colocar um feed por favor

12.

Davi

13. mar, 2008

Muito legal o post, Paulo.

Uma pergunta: qual tem sido a prática com relação a JPA e DAOs? Porque tenho visto algumas pessoas defendendo que, com o EntityManager, não é

necessário criar DAOs, pois o EntityManager já funcionaria como uma abstração, e ainda é um padrão.

Qual sua opinião a respeito?

13.

Fred

03. nov, 2008

Tenho a mesma duvida do Davi

14.

Paulo Silveira

03. nov, 2008

Essa é uma discussão que a gente aborda no treinamento de EJB na Caelum.

Se voce estiver usando JPA fora do servidor, certamente é uma boa pratica encapsular o acesso ao EntityManager por um DAO ou alguma outra classe.

Se voce esta usando JPA dentro de um servidor java ee, existem 3 opcoes:

- Usar o EntityManager diretamente, sem nenhum outro layer

- Criar um session bean, que age como DAO, e é injetado em outros beans atraves de @EJB- Criar um DAO que é um POJO e não é um EJB, da maneira habitual

Cada um tem suas vantagens e desvantagens. Nos pessoalmente nao gostamos da 1a opcao, de acessar o EntityManager diretamente sempre, apesar de

Page 5: Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes _ blog.caelum.com

16/01/13 Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes | blog.caelum.com.br

blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/?utm_source=Caelum&utm_campaign=342320b013-Newsletter… 5/8

existirem recursos (como named queries) que possibilitam isso de uma maneira de certa forma organizada.

15.

Felipe

20. mai, 2010

Excelente!

16.

Cristiano

04. nov, 2010

Bacana! Tive um problema ao executar a inserção de grandes quantidades de registros na base de dados. Acredito q a dica sobre Stateless Session será util!

17.

Marcos Hanberas

07. fev, 2011

Dizer que Open Session in View faz parte dos 7 hábitos altamente eficazes não faz sentido. Este é um dos maiores anti-patterns já criado, justamente pelo fatode passar desapercebido pela maioria das pessoas. Reveja esta parte, porque muitos programadores que chegam aqui na empresa seguem a risca o que leêm

no blog da Caelum.

18.

Paulo Silveira

07. fev, 2011

@Marcos Hanberas. Nao entendi sua argumentacao do open session in view ser um anti pattern. Por que motivo? Alguma referência a respeito? Se é por

causa do excesso de queries lazy, basta ler _um_ paragrafo abaixo e vai ver que também é falado para tomar cuidado com o excesso de queries e o

problema do n+1.

19.

Marcos Hanberas

12. fev, 2011

@Paulo Silveira. Paulo, fui avisado pelo estágio que você respondeu a minha colocação, desculpe não ter respondido antes. A visão do OpenSessionInFilter

como antipattern não é novidade. Zubin Wadia e Dennis Byrne já alertavam sobre esse antipattern faz tempo. Na própria comunidade do Hibernate ela não évista com bons olhos. Se isso é algo que deve ser evitado, então, não deveria constar nos 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes.

Como todo desenvolvedor que não gosta de reinventar a roda, a explicação desse cara aqui para mim é satisfatória, mas faltou casos de uso para ficar mais

clara: http://www.guj.com.br/java/231652-alguem-usa-algum-padrao-diferente-de-open-session-in-view-ao-trabalhar-com-jpa

Eu estarei off durante duas semanas, mas posso voltar a tocar no assunto sempre quando necessário. Um abraço

20.

Paulo Silveira

12. fev, 2011

@Marcos

Acho a explicacao do Flavio muito boa. Realmente o problema do N+1 pode acontecer com o excesso de lazy, que esta relacionado nao exatamente ao usodo open session in view e sim do excesso de lazy. Mas como te falei, nesse mesmo post que escrevi, 1 paragrafo abaixo do OpenSessionInView, eu falo

exatamente isso: para tomar cuidado com os lazy e o n+1.

Page 6: Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes _ blog.caelum.com

16/01/13 Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes | blog.caelum.com.br

blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/?utm_source=Caelum&utm_campaign=342320b013-Newsletter… 6/8

Nao encontrei outras referencias a isso a nao ser ao livro do MyFaces que voce citou. E, no JSF, realmente o lazy se complica ainda mais, ja que, em

algumas implementacoes, sao disparados muitos dos seus getters, por varias vezes, durante uma requisicao, ativando seus atributos lazys e fazendo N queries.

Respondi la no GUJ para o Flavio.

21.

Mayko

14. fev, 2011

Parabéns pelo post! agora vi que preciso melhorar minha infraestrutura utilizando o Hibernate, já perdi as contas de quantas vezes tive que utilizar o método

clear para realizar operações transacionais, talvez se tivesse lido isto antes já teria pensado em algo melhor. Agora só uma pergunta. Eu costumo utilizar aimplementação do SessionFactory para trabalhar com o Hibernate, sei que poderia utilizar o EntityManager mas até onde sei este não possue a API Criteria

que é um recurso que eu gosto bastante, então o que eu ganho utilizando o EntityManager? outra coisa: eu utilizo o JPA para realizar o mapeamento mas nãoutiilizo a unidade de persistência dele e sim a do hibernate diretamente, isto tem a ver com o que você falou no primeiro hábito?

Obrigado, faz pouco tempo que começei com o Hibernate, pouco mais de um ano, e quero melhorar muito..

valeu Caelum, valeu Paulo

22.

Paulo Silveira

14. fev, 2011

@Mayko

Sobre usar o EntityManager/JPA, a maior vantagem vai ser utilizar um padrão, e dessa forma não ter de reaprender outra api de ORM se um dia for trocar devendor. Para alguns isso não é motivo suficiente para usar JPA. Sobre o Criteria, na JPA2 ela está presente mas gera mixed feelings por sua tipagem forte eseu StaticMetaModel. Falei um pouco disso aqui:

http://blog.caelum.com.br/metaprogramacao-em-java-o-papel-do-apt/

Fico contente que o post tenha ajudado.

23.

Danilo Miranda

17. mar, 2011

Olá Paulo,

Como faço para identificar num projeto se o programador utilizou Connection Pool ou não?

Abraço.

24.

Paulo Silveira

17. mar, 2011

@Danilo

Basta voce ver como esta a configuracao do hibernate.cfg.xml. La fica definido o uso do c3p0, por exemplo.

25.

Danilo Miranda

19. mar, 2011

@Paulo

Page 7: Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes _ blog.caelum.com

16/01/13 Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes | blog.caelum.com.br

blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/?utm_source=Caelum&utm_campaign=342320b013-Newsletter… 7/8

Não encontrei este arquivo em meu projeto.

Fiz uma pesquisa e disseram que fica aqui: WEB-INF/classes/resources/hibernate.cfg.xml

Mas no meu projeto nem tenho esta pasta resources dentro de classes.

26.

Paulo Silveira

19. mar, 2011

Ola Danilo

Pode ser que seu hibernate esteja funcionando com o estilo antigo de configuracao, que fica em hibernate.properties em vez de hibernate.cfg.xml. Pode estartambem em outro diretorio, o mais comum seria em WEB-INF/classes em produção, mas pode variar também se você configurar de maneiras diferentes.

27.

Fabiano Conrado

03. ago, 2011

Excelente material!

28.

ricardo wolosker

10. dez, 2011

é possível fazer relacionamentos de 1:1 forçando entidade fraca?

Trackbacks/Pingbacks

1. Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes | Blog MasterSoft Sistemas Ltda - fevereiro 20, 2008

[...] Paulo Silveira publicou no blog da Caelum um excelente post sobre “Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes“. Nele elechama a atenção para muitas partes que são frequentemente esquecidas pelos [...]

2. No more DAO’s | Rafael Ponte - junho 8, 2009

[...] em mente que nossa aplicação (principalmente o domain model) estará “mergulhada” nas features do framework, como anotações, contexto depersistência, lazy loading, dirty checking etc. [...]

3. Enfrentando a LazyInitializationException no Hibernate | blog.caelum.com.br - outubro 13, 2009

[...] quando realmente necessários. Ao mesmo tempo deve-se tomar cuidado: pode gerar o problema das n+1 queries, e muitas vezes sabemos que talrelacionamento será tão utilizado, que deve ser feito de maneira [...]

4. As dependências do Hibernate 3.5 | blog.caelum.com.br - abril 14, 2010

[...] muito o desenvolvimento com banco de dados, porém para uma performance e escalabilidade adequada é necessário ficar atento em alguns pontosfundamentais, e também simples, para que ele não se torne um gargalo na sua aplicação. Dentro do diretório [...]

5. Using EclipseLink JPA Weaving « CoffeeBreak Point. - dezembro 9, 2010

[...] tudo. Consultas em classes com diversos relacionamentos e/ou com coleções estavam gerando queries excessivas, bom e como resolver isso [...]

6. Quando muitos dados passam a atrapalhar: replicação e sharding | blog.caelum.com.br - fevereiro 9, 2011

[...] de performance e escalabilidade, como por exemplo a criação de um índice para buscas, o uso de caches e de chamadas [...]

7. Caçando seus gargalos com o Hibernate Statistics | blog.caelum.com.br - junho 8, 2011

[...] escalabilidade da aplicação. Será realmente culpa do framework? Práticas simples podem ajudar a enfrentar esses gargalos ao usar o Hibernate, mas

como detectá-los numa aplicação que já foi mapeada sem muito cuidado? Uma das ferramentas [...]

8. Ração Semanal: JPA & Hibernate « Rogério Araújo - julho 7, 2011

[...] Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente …: http://blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-

altamente-eficazes/; [...]

Page 8: Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes _ blog.caelum.com

16/01/13 Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes | blog.caelum.com.br

blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/?utm_source=Caelum&utm_campaign=342320b013-Newsletter… 8/8

9. Ração Semanal: JPA & Hibernate : TI & Informática para Concursos Públicos - julho 7, 2011

[...] Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente …: http://blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/; [...]

10. Iniciando bem no geoprocessamento com VRaptor 3 e Postgis | Carlos Alberto Junior - junho 19, 2012

[...] interceptadores para controlar as transações. Este modo de controle de transações é o famoso Open Session in View. Além de transações, ele tambémcria as sessões com o banco e injeta nas nossas lógicas o [...]

11. Mandando bem no geoprocessamento com VRaptor 3, Maven e Postgis | iMasters - novembro 28, 2012

[...] interceptadores para controlar as transações. Este modo de controle de transações é o famoso Open Session in View. Além de transações, ele tambémcria as sessões com o banco e injeta nas nossas lógicas o [...]

Deixar uma Resposta

Nome (obrigatório) E-mail (obrigatório) Site (opcional)

Digite seu comentário aqui...

ASSINE NOSSO RSS

Facebook

Caelum - Ensino e Inovação

Curtir

11.606 pessoas curtiram Caelum - Ensino e

Inovação.

Destaques

As Novidades do Eclipse JunoPor uma Web mais rápida: 26 técnicas de otimização de SitesUse CDI no seu próximo projeto Java

Flexibilidade em páginas para dispositivos móveis com media queriesComo não aprender Java e Orientação a Objetos: getters e settersUsando o Google Maps e GPS no Android

Entenda os MVCs e os frameworks Action e Component BasedPixels, pixels ou pixels? Dicas de Web Mobile com viewportAs novidades do Hibernate 4Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes

Siga-nos no Twitter

Caelum

@caelum

6341 seguidores

"CSS, Front-end, curso online JSF 2, Java e Retrospectiva 2012 http://t.co/FTaLkOde #newsletter #caelum"

Caelum RSS Newsletter Contato