Casa do Código Todos os direitos reservados e protegidos pela Lei nº9.610, de 10/02/1998. Nenhuma parte deste livro poderá ser reproduzida, nem transmitida, sem autorização prévia por escrito da editora, sejam quais forem os meios: fotográficos, eletrônicos, mecânicos, gravação ou quaisquer outros. Casa do Código Livros para o programador Rua Vergueiro, 3185-8º andar 04101-300 Vila Mariana São Paulo SP Brasil
Casa do Código Sobre o autor Hébert Coelho de Oliveira é analista desenvolvedor sênior, pós-graduado em Engenharia de Soware, professor em faculdade e escritor nas horas vagas. Trabalha há mais de anos com desenvolvimento de sowares e possui as certicações SCJP, SCWCD, OCBCD, OCJPAD. É autor do livro JSF Ecaz, publicado pela editora Casa do Código, que dá dicas e melhores práticas para os desenvolvedores que utilizam o JSF em seus projetos. É criador do blog http://uaihebert.com, visualizado por países, totalizando mais de mil visualizações em seus anos de vida. É ainda autor do framework EasyCriteria (http://easycriteria.uaihebert.com) que ajuda na utilização da Criteria da JPA, sendo testado com Hibernate, OpenJPA e EclipseLink e com de cobertura nos testes. Foi revisor de um livro especíco sobre Primefaces e criador de posts em seu blog com aplicações completas utilizando JSF. Escreveu dois posts sobre JPA com diversas dicas que já passaram de mil visualizações, e que também foi o ponto de partida desse livro. Pós-graduado em MIT Engenharia de Soware desenvolvimento em Java pela Infnet RJ. Atualmente atua como professor para o curso de pós-graduação, ensinando o conteúdo de Java Web (JSP, Servlet, JSF e Struts) e tópicos avançados, como EJB, Spring e WebServices. i
Casa do Código Agradecimentos Agradeço a Deus pela sabedoria, força de vontade e inteligência para conseguir nalizar o livro. Dedico esse livro àquela que é o maior presente que Deus poderia me dar, minha esposa Daiane. Seu sorriso único, seu olhar que encanta e sua voz que traz alegria ao meu coração. Companheira el e única, que está sempre ao meu lado em todas as situações. Dedico também o livro à minha família que está lá no interior de Minas Gerais juntamente com minha linda sobrinha Louanne e sua irmã e minha alhada Fernanda. Segue um agradecimento sem medidas aqui ao Rodrigo Sasaki (http://cv. rodrigosasaki.com) que me ajudou no decorrer desse livro com revisões em textos e códigos. Ter um prossional de alto calibre como ele ajudando na produção de um livro é de incomensurável alegria. Sou grato a Deus por ter colocado em meu caminho pessoa tão boa, sábia e sempre disposta a ajudar. E por último, mas não menos importante, dedico esse livro à minha querida irmã Louise, que sempre briga comigo. [= iii
Casa do Código Sobre o livro A JPA é um framework que vem ganhando mais espaço no mercado a cada dia que se passa. Veremos nesse livro diversos conceitos e dicas de utilizações de diversos recursos que a JPA oferece. Esse livro é ideal para quem já entende o conceito do framework e já sabe fazer um hello world. Ao nal desse livro um desenvolvedor JPA já estará apto a modelar, desenvolver e resolver diversos problemas que podem acontecer ao se trabalhar com JPA. v
Casa do Código Sumário Sumário Introdução Como escolher uma implementação e as congurações da JPA. Escolha uma implementação.... Como compor meu persistence.xml?.... Congurando a aplicação através de XML.... Como conseguir um EntityManager..... Controlando a transação manualmente..... Servidor controlando a transação... Aprenda os detalhes dos mapeamentos de entidades. Entidades e o seu papel no banco de dados.... Saiba Gerar seu id Automaticamente.... O eterno problema do mapeamento de chaves compostas.... Mapeando mais de uma tabela.... Como mapear herança da melhor maneira?..... Mapped Superclass..... SINGLE T ABLE..... JOINED..... TABLE P ER C LASS.... Trabalhe com os Embedded Objects.... Mapeie enums e lista de valores... vii
Sumário Casa do Código Entenda e mapeie corretamente os relacionamentos. Use os relacionamentos..... Relacionamentos com @OneToOne..... Cuidados com o @OneToMany e @ManyToOne..... @ManyToMany.... Entenda como funciona o Cascade.... Entenda como funciona o OrphanRemoval.... Como utilizar Lazy e Eager Loading corretamente.... Entenda a LazyInitializationException..... Utilizando o método size das listas..... Carregamento por anotação..... Stateful EJB..... Carregando por Query com Join.... Aprenda a tratar o erro: cannot simultaneously fetch multiple bags.. Trate o erro: could not initialize a collection.... Cuidado para não cair no famoso efeito n+... Aprenda os truques da JPQL e domine as consultas da JPA. Esqueça SQL! Abuse da JPQL.... Parâmetros com JPQL.... Navegações nas pesquisas..... Join..... Faça ordenações..... Navegando pelos relacionamentos.... Funções Matemáticas..... Calculando mínimos e máximos..... Contando resultados..... Outras funções: MOD, SQRT e AVG.... Funções String.... Agrupadores - group by e having.... Condições para comparações..... Restrinja pesquisas por uma lista com o IN..... Evite repetições com DISTINCT..... Listas e valores vazios com EMPTY e NULL... viii
Casa do Código Sumário.. Pesquise por intervalos com BETWEEN..... Busca por trechos de texto com LIKE..... Verique se um elemento existe com o MEMBER OF..... Operações em listas com EXISTS, ANY, SOME e ALL..... Use CONCAT para concatenar Strings..... Verique a posição de um texto com o LOCATE..... Identique o tamanho de listas com o SIZE.... Trabalhando com data e hora atual.... Buscando apenas um resultado na consulta.... Criando objetos com o retorno de consultas... Alternativas às consultas: Named Queries e Queries nativas. Organizando consultas com NamedQuery.... Quando há algo muito especíco, utilize Query nativa.... Devolva resultados complexos com queries nativas... Entenda as queries programáticas com Criteria. A Criteria mais simples do Hibernate.... EasyCriteria... Recursos avançados com a JPA. Não deixe os resultados da consulta em memória..... Otimização com EJB..... Otimização com Spring..... Java SE ou transação manual.... Paginação de consultas.... Operações em muitos registros - Bulk Operations.... Tratamento de concorrência..... Read Committed..... Aplicando o Lock..... Lock Otimista..... Lock Pessimista... Finalizando Versão:.. ix