Esta oferta será encerrada em...

BLACK FRIDAY

DA ALGAWORKS

ESPECIALISTA JPA

Assista ao vídeo para conhecer o projeto do curso!

O Que Nossos Alunos Falam de Nós?

Os bônus que você vai ganhar

E-book Java e Orientação a Objetos

Mais um material para você estudar ou reforçar seu conhecimento em Java e Orientação a Objetos. Um livro digital com quase 300 páginas.

Envio imediato após a compra.

VALE R$50

GRÁTIS

Suporte VIP por 6 meses

Você vai ganhar o Suporte VIP de nossos especialistas por 6 meses, para tirar todas as suas dúvidas durante os seus estudos.

VALE R$2.382

GRÁTIS

Certificado de conclusão

Eu não acho que isso seja a coisa mais importante. Nós focamos nos resultados que nossos alunos podem gerar.

Mas sei que algumas pessoas precisam de certificado por questões burocráticas de onde trabalham ou estudam, por isso nós emitimos um certificado de conclusão com validação digital quando você concluir o curso.

Nosso certificado tem o selo da Associação Brasileira de Educação a Distância, e consta 100 horas de carga horária.

TUDO ISSO VALE R$3.712,00

Mas mesmo valendo isso, sabemos que esse valor seria inviável para muitas pessoas. Por isso...

...o investimento para o treinamento Especialista JPA é de apenas R$1.280.

Mas esquece esse valor! Como você está no grupo VIP da Black Friday no WhatsApp...

VOCÊ INVESTIRÁ APENAS R$1.280 R$980

23% OFF + BÔNUS

12x R$98,39
De R$1.280 por R$980 à vista
  • Curso Especialista JPA
  • E-book Java e Orientação a Objetos
  • Suporte VIP por 6 meses
  • Acesso vitalício
  • Certificado de conclusão
COMPRAR AGORA

Sem Qualquer Risco pra Você!
Garantia Incondicional de 30 Dias.

Se você comprar o curso e não ficar 100% satisfeito com o conteúdo que te entregarmos, é só enviar um e-mail para contato@algaworks.com, dentro do prazo de 30 dias após a compra, e pedir o seu dinheiro de volta!

Nós vamos estornar seu pagamento integralmente, sem cobrança de taxas, multas... absolutamente nada! Não vamos fazer nenhuma pergunta antes de devolver seu dinheiro, e o mais importante, não ficaremos magoados com você.

Nós oferecemos essa garantia porque, além de confiar em você, confiamos também na qualidade de nosso curso, entendemos que você pode se enganar ao comprar um curso, e não seria justo ficarmos com seu dinheiro se você não puder aproveitar o conteúdo do curso.

Conheça a Programação das Aulas

Mais de 30 horas de videoaulas. Carga horária equivalente a 100 horas/aula.

1. Introdução
1.1. Boas-vindas e como fazer o curso
1.2. Instalando o MySQL Server e o MySQL Workbench
1.3. O que é persistência de dados?
1.4. Criando tabelas e persistindo dados pelo MySQL Workbench
1.5. Usando o MySQL Client
1.6. Instalando o JDK
1.7. Instalando a IDE IntelliJ IDEA
1.8. Importando o projeto do GitHub
1.9. Entendendo e configurando o JUnit
1.10. Acessando o banco de dados com JDBC
1.11. O que é JPA?
1.12. O que é Mapeamento Objeto-Relacional (ORM)?
1.13. Jakarta Persistence vs Java Persistence API

2. Iniciando com JPA
2.1. Criando um projeto com Apache Maven
2.2. Mapeando a primeira entidade com JPA
2.3. Criando o persistence.xml
2.4. Criando o EntityManager
2.5. Montando a classe para testes com o JUnit
2.6. Buscando objetos por identificador
2.7. Criando uma classe genérica para testes
2.8. Abrindo e fechando uma transação
2.9. Inserindo o primeiro objeto com o método persist
2.10. Removendo objetos com o método remove
2.11. Atualizando objetos com o método merge
2.12. Atualizando objetos gerenciados
2.13. Adicionando objetos com o método merge
2.14. Entendendo a diferença entre os métodos persist e merge
2.15. Exercício: implementando um CRUD
2.16. Desanexando objetos do contexto de persistência com o método detach
2.17. Conhecendo e usando Lombok

3. Mapeamento básico
3.1. Conhecendo o modelo de domínio do projeto e criando as entidades
3.2. Mapeando as entidades e customizando os nomes das tabelas e colunas
3.3. Exercício: mapeando a classe Pedido
3.4. Entendendo a diferença entre mapear atributos ou métodos
3.5. Mapeando enumerações com @Enumerated
3.6. Mapeando objetos embutidos com @Embeddable
3.7. Conhecendo as estratégias para geração de identificador com @GeneratedValue
3.8. Configurando a geração de identificador com @SequenceGenerator
3.9. Configurando a geração de identificador com @TableGenerator
3.10. Configurando geração de identificador com a estratégia IDENTITY
3.11. Exercício: corrigindo classes de testes

4. Mapeamento de relacionamentos
4.1. Conhecendo os tipos de relacionamentos entre entidades
4.2. Mapeando relacionamentos muito-para-um com @ManyToOne
4.3. Exercício: mapeando relacionamentos muitos-para-um
4.4. Mapeando relacionamentos um-para-muitos com @OneToMany
4.5. Exercício: mapeando relacionamentos um-para-muitos
4.6. Mapeando autorelacionamentos com @ManyToOne e @OneToMany
4.7. Removendo objetos referenciados por outras entidades
4.8. Mapeando relacionamentos muitos-para-muitos com @ManyToMany e @JoinTable
4.9. Mapeamento relacionamentos um-para-um com @OneToOne
4.10. Exercício: mapeando relacionamentos um-para-um
4.11. Mapeando relacionamentos um-para-um com @JoinTable
4.12. Entendendo o funcionamento de Eager e Lazy Loading
4.13. Para o que serve o atributo optional?
4.14. Exercício: usando o atributo optional

5. Conhecendo o EntityManager
5.1. Estados e ciclo de vida dos objetos
5.2. Entendendo o cache de primeiro nível
5.3. Gerenciamento de transações
5.4. Funcionamento do método flush
5.5. Contexto de persistência e o dirty checking
5.6. Callbacks para eventos do ciclo de vida
5.7. Listeners para eventos do ciclo de vida

6. Mapeamento avançado
6.1. Conhecendo detalhes da anotação @Column
6.2. Exercício: anotação @Column
6.3. Mapeando chave composta com @IdClass
6.4. Exercício: usando @IdClass
6.5. Mapeando chave composta com @EmbeddedId
6.6. Mapeando chave primária e estrangeira na mesma coluna com @MapsId
6.7. Exercício: usando @MapsId
6.8. Declarando propriedades transientes com @Transient
6.9. Mapeando coleções de tipos básicos com @ElementCollection
6.10. Mapeando coleções de objetos embutidos com @ElementCollection
6.11. Mapeando mapas com @ElementCollection
6.12. Mapeando e persistindo dados de arquivos com @Lob
6.13. Exercício: persistindo fotos de produtos
6.14. Mapeando tabela secundária com @SecondaryTable
6.15. Mapeando herança com @MappedSuperclass
6.16. Entendendo a diferença entre estender uma entidade abstrata e usar a anotação @MappedSuperclass
6.17. Mapeando herança com estratégia de tabela única (single table)
6.18. Mapeando herança com estratégia de uma tabela por classe (table per class)
6.19. Mapeando herança com a estratégia Joined Table
6.20. Exercício: voltando o mapeando de herança para tabela única

7. Mapeando entidades para geração do DDL
7.1. Quando criar o schema do banco usando JPA?
7.2. Configurando detalhes da tabela com @Table
7.3. Exercício: usando @Table
7.4. Configurando colunas com @Column
7.5. Exercício: usando @Column
7.6. Corrigindo os testes do JUnit
7.7. Usando a anotação @Lob em strings
7.8. Configurando chaves estrangeiras com @JoinColumn
7.9. Exercício: usando @JoinColumn
7.10. Entendendo alguns detalhes de @JoinTable
7.11. Configurando tabelas secundárias com @SecondaryTable
7.12. Conhecendo as estratégias de schema generation
7.13. Gerando o schema do banco com arquivos de scripts SQL
7.14. Gerando o schema do banco com metadados e scripts
7.15. Exportando os scripts de schema generation para arquivos externos
7.16. Configurando propriedades da unidade de persistência dinamicamente para schema generation

8. Operações em cascata
8.1. Configurando operações em cascata
8.2. Fazendo inserções de objetos em cascata
8.3. Exercício: fazendo inserções em cascata
8.4. Fazendo atualizações em cascata
8.5. Exercício: fazendo atualizações em cascata
8.6. Fazendo remoções em cascata
8.7. Entendendo a remoção em cascata com @ManyToMany
8.8. Removendo objetos órfãos com a propriedade orphanRemoval
8.9. Quando configurar operações em cascata?

9. JPQL do básico ao avançado
9.1. Introdução à JPQL (Java Persistence Query Language)
9.2. Entendendo as diferenças entre TypedQuery e Query
9.3. Selecionando um atributo da entidade como retorno da consulta
9.4. Trabalhando com projeções
9.5. Trabalhando com projeções e DTO
9.6. Fazendo inner join entre as entidades
9.7. Usando left outer join
9.8. Fazendo o join e usando o fetch
9.9. Entendendo as Path Expressions
9.10. Exercício: consultando pedidos com produto específico
9.11. Passando parâmetros para as consultas
9.12. Usando expressão condicional like
9.13. Usando expressões condicionais is null e is empty
9.14. Usando expressões condicionais de maior e menor
9.15. Exercício: usando expressões de maior e menor com datas
9.16. Usando expressão condicional between
9.17. Usando expressão de diferente
9.18. Usando operadores lógicos
9.19. Ordenando os resultados da consulta
9.20. Fazendo paginação de resultados
9.21. Limitando a quantidade de registros retornados
9.22. Usando funções para strings
9.23. Usando funções para datas
9.24. Usando funções para números

9.25. Usando funções para coleções
9.26. Usando funções nativas
9.27. Usando funções de agregação
9.28. Agrupando o registros com group by
9.29. Exercício: usando group by
9.30. Usando a cláusula where com group by
9.31. Usando o having para condicionar o agrupamento
9.32. Usando a expressão case
9.33. Usando a expressão in
9.34. Usando o distinct para evitar duplicações
9.35. Criando subqueries
9.36. Criando subqueries com a expressão in
9.37. Criando subqueries com a expressão exists
9.38. Exercício: usando a expressão in
9.39. Exercício: criando subqueries
9.40. Exercício: criando subqueries com exists
9.41. Criando subqueries com all
9.42. Criando subqueries com any
9.43. Exercício: criando subqueries com all
9.44. Fazendo operações em lote
9.45. Atualizando objetos em lote
9.46. Removendo objetos em lote
9.47. Configurando uma dynamic query
9.48. Configurando uma query nomeada com @NamedQuery
9.49. Externalizando queries em um arquivo XML
9.50. Abordagem híbrida para dynamic e named queries

10. Criteria API do básico ao avançado
10.1. Introdução à Criteria API do JPA
10.2. Selecionando um atributo da entidade como retorno da consulta
10.3. Exercício: retornando todos os produtos
10.4. Trabalhando com projeções
10.5. Usando tuple para uma projeção
10.6. Trabalhando com projeções e DTO
10.7. Fazendo inner join entre as entidades
10.8. Usando a cláusula on no join
10.9. Usando left outer join
10.10. Fazendo o join e usando o fetch
10.11. Consultando pedidos com um produto específico
10.12. Passando parâmetros para as consultas
10.13. Tipagem forte com metamodel
10.14. Usando expressão condicional like
10.15. Usando as expressões condicionais is null e is empty
10.16. Usando expressões condicionais de maior e menor
10.17. Exercício: usando expressões de maior e menor com datas
10.18. Usando expressão condicional between
10.19. Usando expressão de diferente
10.20. Usando operadores lógicos
10.21. Ordenando os resultados da consulta
10.22. Fazendo paginação e limitando resultados
10.23. Usando funções para string
10.24. Usando funções para datas
10.25. Usando funções para números
10.26. Usando funções para coleções
10.27. Usando funções nativas
10.28. Usando funções de agregação
10.29. Agrupando registros com o group by
10.30. Exercício: usando group by
10.31. Diferença entre expressions, paths e predicates
10.32. Exercício: consultando pedidos com produto específico
10.33. Agrupando registros com funções no group by
10.34. Usando o having para condicionar o agrupamento
10.35. Usando a expressão case
10.36. Usando a expressão in
10.37. Usando distinct para evitar duplicações
10.38. Criando subqueries
10.39. Relacionando a subquery com a query principal
10.40. Criando subquery com a expressão in
10.41. Criando subquery com a expressão exists
10.42. Exercício: criando subqueries
10.43. Exercício: criando subqueries com in
10.44. Exercício: criando subqueries com exists
10.45. Criando subqueries com all
10.46. Criando subqueries com any
10.47. Exercício: criando subqueries com all
10.48. Atualizando objetos em lote
10.49. Removendo objetos em lote

11. Consultas nativas
11.1. Por que usar query nativa?
11.2. Executando SQL e retornando uma lista de arrays
11.3. Executando SQL e retornando uma entidade
11.4. Passando parâmetros para consulta nativa
11.5. Mapeando resultado de queries nativas com @SqlResultSetMapping
11.6. Usando @SqlResultSetMapping com @FieldResult
11.7. Usando @SqlResultSetMapping com @ColumnResult e retornando DTO
11.8. Usando uma @NamedNativeQuery
11.9. Adicionando consultas no arquivo XML
11.10. Exercício: mapeando retorno para um DTO
11.11. Invocando stored procedures com parâmetros in e out
11.12. Recebendo uma lista de registros da procedure
11.13. Exercício: atualizando registros com procedures
11.14. Configurando uma procedure com a anotação @NamedStoredProcedureQuery
11.15. Invocando uma view do banco de dados

12. Bean Validation, pool de conexões, Entity Graph e detalhes avançados
12.1. Validando objetos com Bean Validation
12.2. Exercício: validando objetos
12.3. Analisando anotações utilizadas
12.4. Entendendo o Pool de Conexões
12.5. Usando o HikariCP como gerenciador do pool de conexões
12.6. Buscando conexões de um nome JNDI
12.7. Criando um conversor de atributo
12.8. O problema do @OneToOne com o lazy no Hibernate
12.9. Entendendo e configurando um Entity Graph
12.10. Adicionando um Subgraph na consulta
12.11. Utilizando metamodel com Entity Graph
12.12. Configurando o Entity Graph através da anotação @NamedEntityGraph
12.13. Ajustando a configuração da entidade Pedido
12.14. Resolvendo o problema do N+1

13. Second Level Cache (cache compartilhado)
13.1. Entendendo o cache de segundo nível (ou shared cache)
13.2. Incluindo as entidades no cache
13.3. Removendo entidades do cache
13.4. Verificando se uma entidade está no cache
13.5. Modos de cache e a anotação @Cacheable
13.6. Fazendo controle dinâmico do cache
13.7. Configurando o EhCache como provedor
13.8. Fechando as instância de EntityManager dos exemplos de cache

14. Concorrência e locking
14.1. O que é concorrência e início da configuração dos exemplos
14.2. Resolvendo problemas de concorrência com Lock Otimista
14.3. Tipos que o atributo com @Version pode ter
14.4. Entendendo a diferença entre Lock Otimista e Lock Pessimista
14.5. Fazendo Lock Pessimista com PESSIMISTIC_READ
14.6. Fazendo Lock Pessimista com PESSIMISTIC_WRITE
14.7. Entendendo o que acontece se misturarmos mais de um tipo de lock
14.8. Outros tipos de lock
14.9. Lock com JPQL e Criteria API

15. Multitenancy
15.1. O que é Multitenancy (ou Multitenant) e os tipos de abordagem
15.2. Alteração na classe EntityManagerTest para melhorar a organização dos testes
15.3. Criando um novo schema no banco de dados
15.4. Implementando multitenancy com abordagem por schema
15.5. Implementando multitenancy com abordagem por máquina
15.6. Analisando uma aplicação web com Multitenant
15.7. Implementando multitenancy por coluna em uma aplicação web

16. PostgreSQL e EclipseLink
16.1. Instalando o PostgreSQL
16.2. Alterando as configurações para usar JPA com PostgreSQL
16.3. Alterando as configurações para usar EclipseLink como implementação do JPA

17. JPA em aplicações web
17.1. Reconhecendo o que aprendemos de JPA dentro de uma aplicação web
17.2. Configurando um projeto web com Spring MVC
17.3. Entendendo o JPA em um projeto com Spring MVC
17.4. Publicando nosso projeto no JBoss Wildfly
17.5. Configurando um projeto web com KumuluzEE
17.6. Entendendo o JPA em um projeto com KumuluzEE
17.7. Transações com RESOURCE_LOCAL vs JTA
17.8. Baixando e configurando o JBoss Wildfly
17.9. Publicando o projeto no JBoss Wildfly
17.10. Conclusão do curso e próximos passos

SÓ HOJE: 23% de desconto + bônus

De R$1.280 por R$980

Ou 12x R$98,39 no cartão de crédito

COMPRAR AGORA

Perguntas Frequentes

Ainda não decidiu? Aqui estão algumas respostas para as perguntas mais comuns...

  • q-iconO que é JPA?

    JPA é o acrônimo de Java Persistence API, agora conhecido como Jakarta Persistence API.

    É a especificação da Jakarta EE (Java EE) para persistência de dados e mapeamento objeto-relacional com Java.

    JPA não é um produto final. Existem várias implementações do JPA, sendo que o Hibernate é o mais famoso. E nós usamos Hibernate neste curso.

    Dentro do período de suporte, sempre que você tiver dúvidas sobre o conteúdo do curso, é só enviar pela área de aluno e um instrutor vai te responder.

    Geralmente demoramos de alguns minutos até 1 dia útil para responder as dúvidas dos alunos.

  • q-iconQuais são os pré-requisitos para fazer o curso?

    Você precisa conhecer Java, Orientação a Objetos e SQL.

    Se você ainda está engatinhando em Java, recomendo não começar por esse curso, porque o conteúdo dele é denso e avançado.

  • q-iconEu já preciso conhecer JPA para fazer o curso?

    Não. Você vai aprender JPA do zero. Mas se você já trabalha com JPA, sem problemas… você vai se tornar especialista na tecnologia.

  • q-iconO treinamento é somente sobre JPA?

    Sim, “somente” no sentido de que o foco será no mapeamento e desenvolvimento da persistência de dados com JPA, mas isso é bastante coisa, porque é um treinamento muito avançado.

  • q-iconQual versão do JPA é usada neste curso?

    Estamos usando JPA 2.2, ou seja, a última versão da especificação.

  • q-iconO que será usado no front-end?

    Esse não é um curso de front-end. O foco é JPA, por isso, não espere aprender front-end neste curso.

    Vamos até criar uma pequena página para testes, mas não é objetivo ensinar qualquer coisa de front-end. O foco é total em JPA.

  • q-iconQual é a diferença do "Especialista JPA" para o "JPA e Hibernate Além do Básico"?

    O JPA e Hibernate Além do Básico é um curso avançado de JPA, porém já tem muito tempo que gravamos ele. A última atualização desse curso foi para JPA 2.1.

    Não estamos mais aceitando novas matrículas neste curso, mas continuamos dando suporte para quem já é aluno com licença de suporte ativa. E o acesso às aulas continuará normalmente, para quem já é aluno.

    O Especialista JPA (EJPA) é um novo curso avançado e atualizado de JPA. Nesse curso, nós focamos mais no código do back-end para trabalhar com JPA. Não adotamos uma tecnologia de front-end, porque o foco é JPA. Os testes são feitos usando JUnit.

    É tipo assim: o JPA e Hibernate Além do Básico é uma Ferrari mais antiga, que não está mais à venda, mas que ainda funciona muito bem.

    E o Especialista JPA é uma Ferrari novinha e melhorada.

  • q-iconO que tem de tão novo nesse curso que não tem no JPA e Hibernate Além do Básico (antigo curso da AlgaWorks)?

    O Especialista JPA (EJPA) é o novo curso da AlgaWorks que substitui o JPA e Hibernate Além do Básico (que nem está mais à venda).

    Por isso, não se trata apenas de ter algo completamente diferente e novo, já que no final das contas, continua sendo um curso de JPA.

    Porém, o EJPA está vindo totalmente atualizado e com detalhes ainda mais avançados. Veja por exemplo algumas novidades:

    Lombok: usamos para evitar código boilerplate das nossas entidades.

    MySQL e PostgreSQL: usamos MySQL durante as aulas, mas ensinamos como trocar para outro sistema de gerenciamento de banco de dados também, como o PostgreSQL.

    Hibernate e EclipseLink: usamos o Hibernate como implementação do JPA durante as aulas, mas você vai aprender a trocar pelo EclipseLink também.

    Entity Graph: você vai aprender a usar Entity Graph para lidar com a performance de carregamento dos objetos.

    Pool de conexões: vamos usar HikariCP como solução de pool de conexões.

    Mapeamentos avançados: você vai aprender a usar @MapsId, @SecondaryTable, @ElementCollection, @IdClass e várias outras anotações.

    JPQL e Criteria API avançado: você vai aprender a escrever consultas avançadas, com um capítulo dedicado a JPQL e outro para Criteria API, com conteúdo bem aprofundado.

    E muuuuito mais!

    Para você ter uma ideia, o curso antigo tem 131 aulas e o Especialista JPA possui 272 aulas. É mais que o dobro!

  • q-iconAo fazer a minha matrícula, vou ter acesso a todas as aulas?

    Sim! Ao efetuar a sua matrícula, você terá acesso imediato a 272 aulas (mais de 33 horas de videoaulas).

  • q-iconEu vou receber uma nota fiscal?

    Sim! Ela será enviada para seu e-mail após o vencimento da garantia de 30 dias.

AlgaWorks Softwares, Treinamentos e Serviços Ltda
CNPJ: 10.687.566/0001-97