Jpa

4,133 views

Published on

Curso de JPA da VerdeSource

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,133
On SlideShare
0
From Embeds
0
Number of Embeds
186
Actions
Shares
0
Downloads
162
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Jpa

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

×