Your SlideShare is downloading. ×
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Boas práticas com jpa 2 e hibernate flisol 2012

3,935

Published on

Palestra sobre o tema "Boas Práticas com JPA 2 e Hibernate". Apresentada no FLISOL 2012 em Goiânia (GO). Não poderia deixar de citar como fonte o excelente blog da Caleum. http://blog.caelum.com.br/

Palestra sobre o tema "Boas Práticas com JPA 2 e Hibernate". Apresentada no FLISOL 2012 em Goiânia (GO). Não poderia deixar de citar como fonte o excelente blog da Caleum. http://blog.caelum.com.br/

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,935
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
101
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Quem aqui já conhece o GAE? Já desenvolveram algo?
  • Transcript

    • 1. Sobre mim Frederico Maia Arantes / @fredmaia Programador Java EE na PC Sistemas Oracle Certified Java SE 6 Programmer (OCJP 6) Instrutor Java na Supera Tecnologia JUGLeader do Gojava Artigo na Easy Java Magazine (Devmedia) http://devsexperts.com
    • 2. Sobre vocês?
    • 3. Antes que eu me esqueça...Fica, vai ter brindes.
    • 4. O Hibernate Framework para mapeamento Objeto Relacional. Mapear o banco para as classes. Simplifica o desenvolvimento e aumenta produtividade. Independência de banco de dados e muitas outras vantagens. Mas é preciso conhecer bem seus frameworks.
    • 5. Qual a diferença entre JPA e Hibernate? JPA é uma especificação. Hibernate é uma implementação. Hibernate surgiu primeiro e a JPA foi inspirada em frameworks como ele, TopLink, EclipseLink. JPA são “regras” de como deve ser feito. O Hibernate pode ser usado como implementação destas regras ou com suas “próprias regras”.
    • 6. LOL! Agora posso esquecer dobanco de dados e pensar só nosobjetos! What??? Wait!!
    • 7. Não esqueça do Banco de Dados Pelo contrário, tenha muita atenção para não perder performance! Em OO pensamos em especializar, dividir responsabilidades, classes pequenas e coesas. No banco de dados nem sempre é bom dividir, as vezes é bom unir e evitar consultas com vários joins desnecessários. Em banco de dados não existe herança!
    • 8. Entenda as estratégias herança Você deve entender as estratégias de herança do JPA e Hibernate:  @SingleTable  @Joined  @TablePerClass public class Pessoa extends PessoaJuridica {
    • 9. E essas aqui, conhece? LazyInitializationException TransientObjectException PersistentObjectException
    • 10. LazyInitializationExceptionSession session = sessionFactory.openSession();NotaFiscal nf = (NotaFiscal) session.load(NotaFiscal.class, 42);session.close();List<Item> items = nf.getItems();System.out.println("numero de pedidos:" + items.size());org.hibernate.LazyInitializationException Porque? Como resolver? Sessão fechada ao tentar buscar os itens. Eager, manter a sessão aberta ou fetch. O ideal? Planeje suas queries, use Lazy nos relacionamentos e fetch ao buscar os registros.
    • 11. TransientObjectExceptionAutor a = new Autor();Livro l = new Livro();a.setLivros(Collections.singleton(l));manager.persist(a);org.hibernate.TransientObjectException - object references an unsaved transient instance Porque? Como resolver? Livro não está sendo salvo, apenas o autor. Chame o persist(l) na transação ou use Cascade no relacionamento entre Autor e Livro.
    • 12. Ministério do JPA adverte:Use Cascade com moderação.
    • 13. PersistentObjectExceptionProduto p = new Produto();p.setId(1l);p.setDescricao(“Computador”);manager.persist(p);org.hibernate.PersistentObjectException: detached entity passed to persist Porque? Como resolver? Seu id está @GeneratedValue e sua entidade detached. Deveria estar transiente ou managed. Antes de persistir use o find, ou o merge.
    • 14. Entenda os estados das entidades JPA Transient ou New: não possui identidade e não está associado a um EntityManager Managed: possui identidade, está associado, seu conteúdo é sincronizado com o banco de dados Detached: possui identidade, mas não está associado, portanto não é sincronizado
    • 15. Cuidado com o Lazy Cuidado com OpenSessionInView para resolver Lazy exceptions. Planeje suas queries. Monte-as para obter o resultado de acordo com o que precisa em cada cenário.
    • 16. Cuidado com as n+1 queries Uma NotaFiscal com Items lazy, gastamos duas queries. Para uma lista de NotaFiscal resultante de uma query, para cada NotaFiscal teremos uma nova query executada para todo getItems invocados. 1 query para listar NotaFiscal, N queries para pegar os relacionamentos. Use configurações de batch-size e fetch-size para carregar as entidades/relacionamentos em blocos em vez de 1 em 1.
    • 17. Utilize second level cache Utilize second level cache para consultas que você precisa muito. Estes dados não devem ser alterados com frequência. Reduza suas idas ao banco de dados.
    • 18. Utilize um pool de conexões Mantém um número (que você define) de conexões abertas sempre, evita o custo de abrí-las a todo o momento e cair no OneSessionPerRequest. Se estiver usando o hibernate sem um servidor EE uma boa opção é o C3P0. Ou utilize um servidor JEE e configue nele mesmo.
    • 19. Pra que buscar sempre o objeto inteiro? Você tem na tela uma combobox de fornecedores e precisa de Id e Nome. Vai usar um “from Fornecedor” e trazer Id, Nome, CNPJ, Razão Sozial, CNAE, Endereço, Status, Tipo do Fornecedor... ? Use: select f.id, f.nome from Fornecedor f
    • 20. Utilize o Hibernate Statistics Saiba quantas vezes cada entidade, coleção (relacionamento) e query está sendo carregada/executada. Quantas vezes o cache foi usado. Tempo médio de cada query. Com estes dados, saiba onde colocar cache, configurar batchsize e fazer joins com fetch eager.
    • 21. Uuuuuii! Ele não usa SQL...assim pode mudar de banco de dados a hora que quiser.
    • 22. Vai mesmo mudar de banco de dados? Poucos sistemas tem que rodar realmente em vários BD’s ou têm possibilidade de serem alterados. Seu sistema se encaixa neste cenário? Então não tenho medo de utilizar SQL nativo se precisar. Você pode estar perdendo excelentes recursos que os bancos de dados oferecem.
    • 23. Estude a documentação Estude a especificação do JPA. Estude a documentação do Hibenate. Estude o capítulo de performance do hibernate. Estude seu banco de dados. Estude... sempre.
    • 24. Obrigado!

    ×