JPAIntrodução
JPAJava Persistence APIJPAMapeamento Objeto/Relacional (ORM)Query Language (EJBQL)Novo padão ORMBaseado no HibernateAgiliza muito o desenvolvimento
JPAPacote: javax.persistenceMapeamento por XML ou AnnotationFramework (Hibernate, TopLink, OpenJPA)Pode ser utilizado fora de container EJBsUso de injeção de dependência ao invés de lookups JNDI
JPA
JPAEntity: POJOs, suporta herança e polimorfismoEntityManager: responsável pelas operações de persistência de objetosPersistenceContext: área de memória que mantém os objetos que estão sendo manipulados pelo EntityManagerProvedores: especificação para frameworks de persistência
JPAEntidadesNo JPA as entidade são descritas como POJO (Plain Old Java Object), sendo criadas através de classes JavaTem uma identidade persistentePodem ter estado persistente e não persistente
JPA
JPACada entidade deve possuir um  identificador de persistência -> Chava primária no banco de dadosO 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.
JPAAnotando CamposNo JPA podemos anotar cada atributo da nossa entidade, de maneira que possamos definir características específicas para cara umPara isso usamos:	@Column
JPAOutras 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
JPAOutras 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
JPAOutras anotações:@OneToOne – Relacionamento “um-para-um”@OneToMany – Relacionamento “um-para-muitos”@ManyToOne – Relacionamento “muitos-para-um”@ManyToMany – Relacionamento “muitos-para-muito”
JPAEntity ManagerSimilar à funcionalidade do Hibernate Session, controla o ciclo de vida das entidadesNew() Cria uma nova entidadePersist()Persiste uma entidade
JPAEntity ManagerRefresh()Atualiza o estado da entidadeRemove()Marca uma entidade para remoçãoMerge()Sincroniza o estado de entidades desacopladas
JPAOperação de Persistência
JPAOperação de Pesquisa e Remoção
JPACiclo de vida
JPARelacionamentosModela a associação entre as entidadesSuporta relacionamento unidirecional e bidirecionalCardinalidadesUm para um (@OneToOne)Um para muitos (@OneToMany)Muitos para um (@ManyToOne)Muitos para muitos (@ManyToMany)
JPAComportamento em CascataUsado para propagar o efeito de uma operação à entidades associadas
JPARelacionamento OneToOneA entidade possui uma propriedade composta cujo tipo é outra entidade
JPARelacionamento ManyToOne e OneToManyA entidade faz parte de uma coleção de entidade de outra entidade
JPARelacionamento ManyToManyDuas entidade possuem coleções umas das outras, ambas terão propriedades de coleção com a anotação @ManyToMany
JPAPersistence.xmlMETA-INF/persistence.xml
JPAConsultas NamedQuery / Query (SELECT p FROM Pessoa p LEFT JOIN p.endereco e WHERE e.rua like :rua“) – pré-compiladoNativeQuery(SELECT p FROM Pessoa p LEFT JOIN Endereco e ON e.codigoPessoa = p.codigo WHERE e.rua like :rua"
JPAConsultas
JPAExercíciosCriar uma aplicação em Seam para utilzar o JPA
JPAExercíciosMapear 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)
JPAExercícios (OneToOne)  Pessoa – EndereçoCriar um método para inserir uma pessoaCriar um método para pesquisar essa pessoaCriar um método para alterar essa pessoaCriar um método para inserir uma pessoa com um endereçoAtenção no Cascade.Criar um método para apagar o endereço de uma pessoaAtenção na referência nulaCriar um método para alterar o endereço de uma pessoa.
JPAExercícios (OneToMany)  Pessoa – TelefoneCriar um método para inserir uma pessoa com um Telefone Atenção no Cascade.Criar um método para apagar o telefone de uma pessoaCriar um método para alterar o telefone de uma pessoa. Atenção na referência nulaCriar um método para listar todos os telefones de uma pessoa.
JPAExercícios (ManyToMany)  Pessoa – TimeCriar um método para inserir uma pessoa e 2 timesAtenção no Cascade.Criar um método para apagar um time de uma pessoaCriar um método para listar todos os Times de uma pessoa.
JPAExercíciosCriar uma namedQuery para buscar as pessoas por nomeCriar uma namedQuery para buscar as pessoas que moram em uma determinada ruaCriar uma namedQuery para buscar as pessoas que torcem para um determinado timeCriar uma namedQuery para buscar as pessoas que tem telefone celular
FIM

Jpa

  • 1.
  • 2.
    JPAJava Persistence APIJPAMapeamentoObjeto/Relacional (ORM)Query Language (EJBQL)Novo padão ORMBaseado no HibernateAgiliza muito o desenvolvimento
  • 3.
    JPAPacote: javax.persistenceMapeamento porXML ou AnnotationFramework (Hibernate, TopLink, OpenJPA)Pode ser utilizado fora de container EJBsUso de injeção de dependência ao invés de lookups JNDI
  • 4.
  • 5.
    JPAEntity: POJOs, suportaherança e polimorfismoEntityManager: responsável pelas operações de persistência de objetosPersistenceContext: área de memória que mantém os objetos que estão sendo manipulados pelo EntityManagerProvedores: especificação para frameworks de persistência
  • 6.
    JPAEntidadesNo JPA asentidade são descritas como POJO (Plain Old Java Object), sendo criadas através de classes JavaTem uma identidade persistentePodem ter estado persistente e não persistente
  • 7.
  • 8.
    JPACada entidade devepossuir um identificador de persistência -> Chava primária no banco de dadosO 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.
    JPAAnotando CamposNo JPApodemos anotar cada atributo da nossa entidade, de maneira que possamos definir características específicas para cara umPara isso usamos: @Column
  • 10.
    JPAOutras 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.
    JPAOutras 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.
    JPAOutras anotações:@OneToOne –Relacionamento “um-para-um”@OneToMany – Relacionamento “um-para-muitos”@ManyToOne – Relacionamento “muitos-para-um”@ManyToMany – Relacionamento “muitos-para-muito”
  • 13.
    JPAEntity ManagerSimilar àfuncionalidade do Hibernate Session, controla o ciclo de vida das entidadesNew() Cria uma nova entidadePersist()Persiste uma entidade
  • 14.
    JPAEntity ManagerRefresh()Atualiza oestado da entidadeRemove()Marca uma entidade para remoçãoMerge()Sincroniza o estado de entidades desacopladas
  • 15.
  • 16.
  • 17.
  • 18.
    JPARelacionamentosModela a associaçãoentre as entidadesSuporta relacionamento unidirecional e bidirecionalCardinalidadesUm para um (@OneToOne)Um para muitos (@OneToMany)Muitos para um (@ManyToOne)Muitos para muitos (@ManyToMany)
  • 19.
    JPAComportamento em CascataUsadopara propagar o efeito de uma operação à entidades associadas
  • 20.
    JPARelacionamento OneToOneA entidadepossui uma propriedade composta cujo tipo é outra entidade
  • 21.
    JPARelacionamento ManyToOne eOneToManyA entidade faz parte de uma coleção de entidade de outra entidade
  • 22.
    JPARelacionamento ManyToManyDuas entidadepossuem coleções umas das outras, ambas terão propriedades de coleção com a anotação @ManyToMany
  • 23.
  • 24.
    JPAConsultas NamedQuery /Query (SELECT p FROM Pessoa p LEFT JOIN p.endereco e WHERE e.rua like :rua“) – pré-compiladoNativeQuery(SELECT p FROM Pessoa p LEFT JOIN Endereco e ON e.codigoPessoa = p.codigo WHERE e.rua like :rua"
  • 25.
  • 26.
    JPAExercíciosCriar uma aplicaçãoem Seam para utilzar o JPA
  • 27.
    JPAExercíciosMapear as seguintestabelas: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.
    JPAExercícios (OneToOne) Pessoa – EndereçoCriar um método para inserir uma pessoaCriar um método para pesquisar essa pessoaCriar um método para alterar essa pessoaCriar um método para inserir uma pessoa com um endereçoAtenção no Cascade.Criar um método para apagar o endereço de uma pessoaAtenção na referência nulaCriar um método para alterar o endereço de uma pessoa.
  • 29.
    JPAExercícios (OneToMany) Pessoa – TelefoneCriar um método para inserir uma pessoa com um Telefone Atenção no Cascade.Criar um método para apagar o telefone de uma pessoaCriar um método para alterar o telefone de uma pessoa. Atenção na referência nulaCriar um método para listar todos os telefones de uma pessoa.
  • 30.
    JPAExercícios (ManyToMany) Pessoa – TimeCriar um método para inserir uma pessoa e 2 timesAtenção no Cascade.Criar um método para apagar um time de uma pessoaCriar um método para listar todos os Times de uma pessoa.
  • 31.
    JPAExercíciosCriar uma namedQuerypara buscar as pessoas por nomeCriar uma namedQuery para buscar as pessoas que moram em uma determinada ruaCriar uma namedQuery para buscar as pessoas que torcem para um determinado timeCriar uma namedQuery para buscar as pessoas que tem telefone celular
  • 32.