O documento resume os principais conceitos do Java Persistence API (JPA), incluindo mapeamento de objetos, entity manager, relacionamentos entre entidades e consultas.
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