JPA
• Java Persistence API
– JPA
– Mapeamento Objeto/Relacional (ORM)
– Query Language (EJBQL)
• Novo padão ORM
• Baseado no Hibernate
• Agiliza muito o desenvolvimento
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
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
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
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.
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
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
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
JPA
• Outras anotações:
– @OneToOne – Relacionamento “um-para-um”
– @OneToMany – Relacionamento “um-para-muitos”
– @ManyToOne – Relacionamento “muitos-para-um”
– @ManyToMany – Relacionamento “muitos-para-muito”
JPA
• Entity Manager
– Similar à funcionalidade do Hibernate Session, controla o ciclo
de vida das entidades
• New()
– Cria uma nova entidade
• Persist()
– Persiste uma entidade
JPA
• Entity Manager
• Refresh()
– Atualiza o estado da entidade
• Remove()
– Marca uma entidade para remoção
• Merge()
– Sincroniza o estado de entidades desacopladas
JPA
• Operação de Persistência
JPA
• Operação de Pesquisa e Remoção
JPA
• Ciclo de vida
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)
JPA
• Comportamento em Cascata
• Usado para propagar o efeito de uma operação à
entidades associadas
JPA
• Relacionamento OneToOne
• A entidade possui uma propriedade composta cujo tipo é
outra entidade
JPA
• Relacionamento ManyToOne e OneToMany
– A entidade faz parte de uma coleção de entidade de outra
entidade
JPA
• Relacionamento ManyToMany
– Duas entidade possuem coleções umas das outras, ambas
terão propriedades de coleção com a anotação @ManyToMany
JPA
• Persistence.xml
META-INF/persistence.xml
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"
JPA
• Consultas
JPA
• Exercícios
– Criar uma aplicação em Seam para utilzar o 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)
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.
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.
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.
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
FIM

Curso jpa java persistence API

  • 2.
    JPA • Java PersistenceAPI – 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
  • 4.
  • 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 – NoJPA 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
  • 7.
  • 8.
    JPA • Cada entidadedeve 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
  • 12.
    JPA • Outras anotações: –@OneToOne – Relacionamento “um-para-um” – @OneToMany – Relacionamento “um-para-muitos” – @ManyToOne – Relacionamento “muitos-para-um” – @ManyToMany – Relacionamento “muitos-para-muito”
  • 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
  • 15.
    JPA • Operação dePersistência
  • 16.
    JPA • Operação dePesquisa e Remoção
  • 17.
  • 18.
    JPA • Relacionamentos – Modelaa 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 emCascata • Usado para propagar o efeito de uma operação à entidades associadas
  • 20.
    JPA • Relacionamento OneToOne •A entidade possui uma propriedade composta cujo tipo é outra entidade
  • 21.
    JPA • Relacionamento ManyToOnee OneToMany – A entidade faz parte de uma coleção de entidade de outra entidade
  • 22.
    JPA • Relacionamento ManyToMany –Duas entidade possuem coleções umas das outras, ambas terão propriedades de coleção com a anotação @ManyToMany
  • 23.
  • 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"
  • 25.
  • 26.
    JPA • Exercícios – Criaruma aplicação em Seam para utilzar o JPA
  • 27.
    JPA • Exercícios – Mapearas 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 – Criaruma 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
  • 32.