O documento introduz os principais conceitos do Java Persistence API (JPA), incluindo mapeamento objeto-relacional, entity manager, consultas, relacionamentos e exercícios de mapeamento de entidades com diferentes associações.
2. JPA Java Persistence API JPA Mapeamento Objeto/Relacional (ORM) Query Language (EJBQL) Novo padão ORM Baseado no Hibernate Agiliza muito o desenvolvimento
3. JPA Pacote: javax.persistence Mapeamento por XML ou Annotation Framework (Hibernate, TopLink, OpenJPA) Pode ser utilizado fora de container EJBs Uso de injeção de dependência ao invés de lookups JNDI
5. JPA Entity: POJOs, suporta herança e polimorfismo EntityManager: responsável pelas operações de persistência de objetos PersistenceContext: área de memória que mantém os objetos que estão sendo manipulados pelo EntityManager Provedores: especificação para frameworks de persistência
6. JPA Entidades No JPA as entidade são descritas como POJO (Plain Old Java Object), sendo criadas através de classes Java Tem uma identidade persistente Podem ter estado persistente e não persistente
8. JPA Cada entidade deve possuir um identificador de persistência -> Chava primária no banco de dados O Identificador pode corresponder a um tipo simples: @Id : Anota o atributo que será a chave primária. @GeneratedValue: Gera o valor automaticamente, usando diferentes estratégias.
9. JPA Anotando Campos No JPA podemos anotar cada atributo da nossa entidade, de maneira que possamos definir características específicas para cara um Para isso usamos: @Column
10. JPA Outras anotações: @Temporal - Define que um campo armanezará valor do tipo data @Enumerated - Define que o campo está relacionado a um Enum @Transiente – Define que esta propriedade não será armazenada no banco. @Lob – Define que o campo armazenará dados do tipo Long Object Binary
11. JPA Outras anotações: @Entity – Entidade a ser persistida @Table – Especifica propriedade da tabela @Column – Especifica a propriedade da coluna @Id – Especifica a chave primária @Named Query – Cria consultas estáticas @GeneratedValue – Gera id’s automaticamente
13. JPA Entity Manager Similar à funcionalidade do Hibernate Session, controla o ciclo de vida das entidades New() Cria uma nova entidade Persist() Persiste uma entidade
14. JPA Entity Manager Refresh() Atualiza o estado da entidade Remove() Marca uma entidade para remoção Merge() Sincroniza o estado de entidades desacopladas
18. JPA Relacionamentos Modela a associação entre as entidades Suporta relacionamento unidirecional e bidirecional Cardinalidades Um para um (@OneToOne) Um para muitos (@OneToMany) Muitos para um (@ManyToOne) Muitos para muitos (@ManyToMany)
19. JPA Comportamento em Cascata Usado para propagar o efeito de uma operação à entidades associadas
24. JPA Consultas NamedQuery / Query (SELECT p FROM Pessoa p LEFT JOIN p.endereco e WHERE e.rua like :rua“) – pré-compilado NativeQuery(SELECT p FROM Pessoa p LEFT JOIN Endereco e ON e.codigoPessoa = p.codigo WHERE e.rua like :rua"
27. JPA Exercícios Mapear as seguintes tabelas: Pessoa (Id, nome, dataNasciomento) Telefone (id, numero, tipoTelefone) TipoTelefone (Enum: Residencial, Celular, Comercial) Endereço (id, rua, bairro, numero) Time (id, nome) Uma Pessoa tem N Telefones (OneToMany) N Pessoas torcem para N Times (ManyToMany) N Telefones para 1 Pessoa (ManyToOne) Uma pessoa tem 1 Endereço (OneToOne) Um Telefone é de um Tipo de Telefone. (Uso de Enum)
28. JPA Exercícios (OneToOne) Pessoa – Endereço Criar um método para inserir uma pessoa Criar um método para pesquisar essa pessoa Criar um método para alterar essa pessoa Criar um método para inserir uma pessoa com um endereço Atenção no Cascade. Criar um método para apagar o endereço de uma pessoa Atenção na referência nula Criar um método para alterar o endereço de uma pessoa.
29. JPA Exercícios (OneToMany) Pessoa – Telefone Criar um método para inserir uma pessoa com um Telefone Atenção no Cascade. Criar um método para apagar o telefone de uma pessoa Criar um método para alterar o telefone de uma pessoa. Atenção na referência nula Criar um método para listar todos os telefones de uma pessoa.
30. JPA Exercícios (ManyToMany) Pessoa – Time Criar um método para inserir uma pessoa e 2 times Atenção no Cascade. Criar um método para apagar um time de uma pessoa Criar um método para listar todos os Times de uma pessoa.
31. JPA Exercícios Criar uma namedQuery para buscar as pessoas por nome Criar uma namedQuery para buscar as pessoas que moram em uma determinada rua Criar uma namedQuery para buscar as pessoas que torcem para um determinado time Criar uma namedQuery para buscar as pessoas que tem telefone celular