13

© Casa do Código - Cloud Object Storage · esposa Daiane. Seu sorriso único, seu olhar que encanta e sua voz que traz alegria ao meu coração. Companheirael e única, que está

Embed Size (px)

Citation preview

© 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