© 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 auto-rizaçã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
Casa do Código
Sobre o autor
Hébert Coelho de Oliveira é analista desenvolvedor sênior, pós-graduado em Enge-nharia de So�ware, professor em faculdade e escritor nas horas vagas. Trabalha há mais de �� anos com desenvolvimento de so�wares e possui as certi�cações SCJP, SCWCD, OCBCD, OCJPAD.
É autor do livro JSF E�caz, 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 bloghttp://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 cober-tura 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 So�ware — desenvolvimento em Java pela Infnet RJ. Atualmente atua como professor para o curso de pós-graduação, ensi-nando o conteúdo de Java Web (JSP, Servlet, JSF e Struts) e tópicos avançados, como EJB, Spring e WebServices.
Casa do Código
Agradecimentos
Agradeço a Deus pela sabedoria, força de vontade e inteligência para conseguir �na-lizar 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 a�lhada Fer-nanda.
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 pro�ssional 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. [=
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.
Casa do Código Sumário
Sumário
� Introdução �
� Como escolher uma implementação e as con�gurações da JPA �
�.� Escolha uma implementação . . . �
�.� Como compor meu persistence.xml? . . . �
�.� Con�gurando 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 . . . ��
�.�.� SINGLETABLE . . . ��
�.�.� JOINED. . . ��
�.�.� TABLEPERCLASS. . . ��
�.� 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. . . ���
�.�.� Veri�que se um elemento existe com o MEMBER OF . . . . ���
�.�.� Operações em listas com EXISTS, ANY, SOME e ALL . . . . ���
�.�.� Use CONCAT para concatenar Strings . . . ���
�.�.� Veri�que a posição de um texto com o LOCATE . . . ���
�.�.�� Identi�que 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