© casa do código - cloud object storage · esposa daiane. seu sorriso único, seu olhar que...
TRANSCRIPT
© Casa do CódigoTodos 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ódigoLivros para o programadorRua Vergueiro, 3185 - 8º andar04101-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 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á dicase melhores práticas para os desenvolvedores que utilizam o JSF em seus projetos.
É criador do blog http://uaiHebert.com, visualizado por ��� países, totalizandomais de ��� mil visualizações em seus � anos de vida. É ainda autor do frameworkEasyCriteria (http://easycriteria.uaihebert.com) que ajuda na utilização da Criteriada JPA, sendo testado comHibernate, OpenJPA e EclipseLink e com ���� de cober-tura nos testes.
Foi revisor de um livro especí�co sobre Primefaces e criador de posts em seublog com aplicações completas utilizando JSF. Escreveu dois posts sobre JPA comdiversas dicas que já passaram de ��mil visualizações, e que também foi o ponto departida desse livro.
Pós-graduado emMITEngenharia de So�ware—desenvolvimento em Java pelaInfnet RJ. Atualmente atua como professor para o curso de pós-graduação, ensi-nando o conteúdo de JavaWeb (JSP, Servlet, JSF e Struts) e tópicos avançados, comoEJB, Spring e WebServices.
i
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 é omaior presente que Deus poderia me dar, minhaesposa Daiane. Seu sorriso único, seu olhar que encanta e sua voz que traz alegriaao meu coração. Companheira �el e única, que está sempre ao meu lado em todasas situações.
Dedico também o livro à minha família que está lá no interior de Minas Geraisjuntamente 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 textose códigos. Ter um pro�ssional de alto calibre como ele ajudando na produção deum livro é de incomensurável alegria. Sou grato a Deus por ter colocado em meucaminho pessoa tão boa, sábia e sempre disposta a ajudar.
E por último,mas nãomenos 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 quese passa.
Veremos nesse livro diversos conceitos e dicas de utilizações de diversos recursosque a JPA oferece. Esse livro é ideal para quem já entende o conceito do frameworke já sabe fazer um “hello world”.
Ao �nal desse livro um desenvolvedor JPA já estará apto a modelar, desenvolvere 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 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