Jpa

32
JPA Introdução

description

Curso de JPA da VerdeSource

Transcript of Jpa

Page 1: Jpa

JPA

Introdução

Page 2: Jpa

JPA

• Java Persistence API– JPA– Mapeamento Objeto/Relacional (ORM)– Query Language (EJBQL)

• Novo padão ORM• Baseado no Hibernate• Agiliza muito o desenvolvimento

Page 3: Jpa

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

Page 4: Jpa

JPA

Page 5: Jpa

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

Page 6: Jpa

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

Page 7: Jpa

JPA

Page 8: Jpa

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.

Page 9: Jpa

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

Page 10: Jpa

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

Page 11: Jpa

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

Page 12: Jpa

JPA

• Outras anotações:

– @OneToOne – Relacionamento “um-para-um”– @OneToMany – Relacionamento “um-para-muitos”– @ManyToOne – Relacionamento “muitos-para-um”– @ManyToMany – Relacionamento “muitos-para-muito”

Page 13: Jpa

JPA

• Entity Manager– Similar à funcionalidade do Hibernate Session, controla o ciclo

de vida das entidades

• New()– Cria uma nova entidade

• Persist()– Persiste uma entidade

Page 14: Jpa

JPA

• Entity Manager

• Refresh()– Atualiza o estado da entidade

• Remove()– Marca uma entidade para remoção

• Merge()– Sincroniza o estado de entidades desacopladas

Page 15: Jpa

JPA

• Operação de Persistência

Page 16: Jpa

JPA

• Operação de Pesquisa e Remoção

Page 17: Jpa

JPA

• Ciclo de vida

Page 18: Jpa

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)

Page 19: Jpa

JPA

• Comportamento em Cascata• Usado para propagar o efeito de uma operação à

entidades associadas

Page 20: Jpa

JPA

• Relacionamento OneToOne• A entidade possui uma propriedade composta cujo tipo é

outra entidade

Page 21: Jpa

JPA

• Relacionamento ManyToOne e OneToMany– A entidade faz parte de uma coleção de entidade de outra

entidade

Page 22: Jpa

JPA

• Relacionamento ManyToMany– Duas entidade possuem coleções umas das outras, ambas

terão propriedades de coleção com a anotação @ManyToMany

Page 23: Jpa

JPA

• Persistence.xml

META-INF/persistence.xml

Page 24: Jpa

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"

Page 25: Jpa

JPA

• Consultas

Page 26: Jpa

JPA

• Exercícios– Criar uma aplicação em Seam para utilzar o JPA

Page 27: Jpa

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)

Page 28: Jpa

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.

Page 29: Jpa

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.

Page 30: Jpa

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.

Page 31: Jpa

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

Page 32: Jpa

FIM