FJ-25 | Persistência com JPA e Hibernate (Sábado)
Rua Vergueiro, 3185 - 8º andar, Vila Mariana - São Paulo/São Paulo - Brasil
Descrição
Carga Horária: 32 horas aula
Seja na Web ou no Desktop, trabalhar com banco de dados em Java é praticamente sinônimo de JPA e Hibernate. O mapeamento objeto-relacional e as inúmeras facilidades dessas ferramentas facilitam muito a vida do programador Java, trazendo muita produtividade.
Neste curso recentemente reformulado, o aluno conhecerá em detalhes a JPA e o Hibernate em suas versões mais atualizadas. O curso aborda os conceitos de ORM, gerenciamento de persistência, relacionamentos, buscas avançadas, otimizações, cache, integração com Web, busca textual com Lucene e Hibernate Search, validação com Hibernate Validator e a nova Bean Validation.
Após esse curso, você estará preparado para trabalhar em projetos avançados com Hibernate e JPA inclusive com a última versão 2.0 da JPA do Java EE 6.
Esse curso faz parte da Formação Java Avançada junto com o FJ-26.
Pré-requisitos:
Cursos FJ-11 e FJ-21 ou: Java, Orientação a Objetos, Collections, JSP, JSTL básico, MVC, patterns DAO e Factory.
Conteúdo Detalhado:
Persistência com JPA2 e Hibernate
- Livrar-se de SQL?
- Tirando dúvidas
- Para onde ir depois?
Definição do projeto
- Descrição do problema
- Tecnologias escolhidas
- Um panorama geral sobre o domínio do projeto
- Exercícios: Criando o projeto no eclipse
Mapeamento Objeto Relacional
- Trabalhando com o banco de dados
- Trabalhando com sistemas orientado à objetos
- Evitando o SQL dentro do código Java
- Unindo os dois mundos através do Mapeamento Objeto Relacional
- A Java Persistence API - JPA
- Mapeando os modelos através de anotações
- Configurando a JPA
- Criando o banco de dados e se conectando
- Persistindo objetos dentro de uma transação
- Exercícios: Mapeando os modelos e criando o banco de dados
- Exercícios Opcionais: Tempo de execução, criação do banco de dados e scanning de entidades
Organização de persistência: DAO e outros patterns
- JPAUtil
- Exercícios: Controlando a criação do EntityManagerFactory com a JPAUtil
- Encapsulando a JPA dentro dos DAOs
- Queries: Selecionando todas linhas
- E quando eu tiver muitos DAOs? Não quero repetir código
- Para saber mais: Repository
- Exercícios: Encapsulando código através do DAO
- Estados das entidades e ciclo de vida
- O estado Managed
- O estado Transient
- O estado Detached
- O estado Removed
Complementando o modelo através de relacionamentos
- Relacionando a Movimentação com uma Conta
- Trabalhando com enumerações
- Definindo a cardinalidade do relacionamento
- Exercícios: Criando o modelo de Movimentacao
- Persistindo objetos envolvidos em relacionamentos
- Exercícios: Tentando criar uma nova Movimentação relacionada com uma Conta
- E quando falha? Entendendo a TransientObjectException
- Buscando objetos com relacionamentos
- Atualizando objetos envolvidos em relacionamentos
- Criando o DAO de Movimentação
- Exercícios: Persistindo e pesquisando relacionamentos
- Para saber mais: Operações em cascata
Integrando o Hibernate com uma aplicação Web
- A ideia do projeto web
- Exercício: colocando o projeto web no ar
- Entendendo a estrutura do projeto web e integrando com os DAOs
- Exercícios: Integrando os DAOs ao projeto Web
- A atualização da conta em uma aplicação web
- Exercícios: Alteração da Conta
Criando queries avançadas para os relatórios
- Entendendo a JPQL
- Utilizando JPQL com and e or no filtro
- Exercícios: Buscando todas movimentações de determinada conta
- Exercícios: Buscando movimentações seguindo alguns critérios
- Executando buscas com funções
- Pesquisando com filtros em relacionamentos
- Exercícios: Calculando o total movimentado em uma Conta
- Exercícios: Pesquisando no relacionamento
- Implementando pesquisas complexas com JPQL
- Exercícios: Relatório avançado
- Para saber mais: Having
- Para saber mais: Named Queries
Relacionamento bidirecional e Lazyness
- E quando eu preciso saber quais são as movimentações da conta?
- Exercícios: Testando o novo mapeamento
- Relacionamento bidirecional
- Exercícios: Utilizando o mappedBy no relacionamento bidirecional
- Detalhes do relacionamento bidirecional
- Relacionamentos Many To Many
- Exercício: Criando um relacionamento Many To Many
- Lazyness
- Exercícios: Testando o carregamento das tags
- Para saber mais: Fetch Profile
- Problema comum na web: LazyInitializationException
- Open EntityManager In View e Controle Transacional
- Exercícios: Implementando o filtro do Open EntityManager In View
- Decidindo pelo lazy ou não
- Para saber mais: join fetch e @BatchSize
Cuidando melhor das conexões e queries
- Escalabilidade e conexões com o banco, qual a relação entre eles?
- Connection Pool do Hibernate
- Usando o C3P0 como pool de conexões
- Exercícios: Configurando e gerenciando o pool com o C3P0
Criando consultas com Criteria
- Evitando concatenação de String nas queries
- As classes principais da Criteria
- Exercício opcional: Conhecendo a Criteria
- Exercício opcional: Pesquisa no relacionamento com MetaModelo dinâmico
- Montando uma consulta dinâmica
- Criteria typesafe com Metamodel
- Criteria typesafe com Static Metamodel
- Exercícios: Consultas utilizando Strings na Criteria
- Desafio: Join e Fetch nas Criterias
- Exercício opcional: Configurando a geração do Static Metamodel pelo Eclipse
- Discussão: Qual tipo de Criteria devo utilizar?
- Desafio: Explore a API de Criteria
Validação e integridade dos modelos
- Validando dados
- A forma tradicional de validação
- A forma simples: Bean Validation e Hibernate Validator
- Utilizando o Hibernate Validator
- Exercícios: Adicionando o Hibernate Validator aos modelos
- Outros validadores
- Exercícios: Utilizando outros validadores
- Alterando a mensagem de erro das validações padrão
- Exercícios: Sobrescrevendo as mensagens de validação
- Criando seu próprio validador
- Exercícios: Criando um validador customizado
- Para saber mais: Agrupando anotações de validação para evitar repetição
- Validação em cascata
- Integração com outras tecnologias
- Exercícios: Integrando com outras tecnologias
Googlando sua aplicação através do Hibernate Search
- O problema de busca por texto: nossas tags
- Apache Lucene
- Além da especificação da JPA2: Recursos específicos do Hibernate
- Encapsulando o Lucene com Hibernate Search
- Configuração do Hibernate Search
- Exercícios: Indexação das Movimentações
- Buscando através do Hibernate Search
- Exercícios: Utilizando o Hibernate Search para buscas textuais
- Exercício opcional: Geração de várias movimentações e observando os índices com o Luke
- Para saber mais: atualizando o índice
- Para saber mais: MultiFieldQueryParser
- Indexando mais de um campo
- Para saber mais: Utilizando o Hibernate Search DSL para facilitar buscas avançadas
- Exercícios Opcionais: Utilizando o Hibernate Search DSL para facilitar buscas avançadas
- Para saber mais: Buscando termos usando AND e NOT
Recursos avançados: Cache, estatísticas e Locks
- Cache de primeiro nível
- Exercícios: Testando o cache de primeiro nível
- Cache de segundo nível
- Exercícios: Configurando e testando o cache de segundo nível
- Estratégias para invalidar o cache
- Cache de collections
- Exercícios: Utilizando cache para as collections
- Invalidadação programática - javax.persistence.Cache
- Exercício opcional: Invalidar programaticamente
- Cache de queries
- Exercícios: Adicionando cache em consultas
- Vendo nossa performance: Hibernate Statistics
- Exercícios: Visualizando estatísticas do hibernate na aplicação web
- Extended Persistence Context - Um Entity Manager para várias requisições
- Lock otimista e pessimista
- Exercícios: Configurando e testando o lock otimista
- Para saber mais: Operações em lote
- Exercícios Opcionais: Operações em lote
Mais mapeamentos
- Relacionamentos um para um
- Exercícios: Mapeando relacionamentos um para um
- O pattern Value Object do Domain Driven Design
- Implementando value objects com Embeddable
- Exercícios: Utilizando o Embeddable em atributos
- Para saber mais: Detalhes sobre o Embeddable
- Para saber mais: Mapeando chaves compostas
Apêndice - Detalhes sobre os mapeamentos
- Mapeando os objetos para um banco de dados legado
- Mapeamento de Herança
- Fazendo scripts de criação de tabelas com SchemaExport
- Exercícios opcionais: vendo o schema gerado
Apêndice - Hibernate Envers
- Auditando as alterações: Listeners
- Utilizando o Hibernate Envers
- Exercícios: Utilizando o Hibernate Envers
- Para saber mais: Revision Entity
Apêndice - Engenharia reversa com Hibernate Tools
- Introdução ao Hibernate Tools
- Configuração do Ant
- Exercícios: Gerando as entidadas a partir das tabelas
Apêndice - Hibernate Puro
- Entendendo a Diferença JPA e Hibernate
- Configuração do hibernate sem JPA
- Startup e CRUD com Hibernate
- Consultas com Criteria do Hibernate
- Rescursos especiais nas buscas
- Joins e Produto Cartesiano
- Scrollable Results um comparativo com o JDBC
- Subselect com Detached Criteria
- StatelessSession
* Os apêndices listados são conteúdos adicionais que não fazem parte do curso regular.
Localização:
Contato
Preencha os campos abaixo para enviar e-mail ao organizador.
