Você está na página 1de 20

Linguagem de Programação

Mapeamento objeto relacional; Padrões de acesso a


dados.

Prof. Igor de Moraes Sampaio


igor.sampaio@ifsp.edu.br

Instituto Federal de Educação, Ciência e Tecnologia de São Paulo - Campus São Paulo
Persistência

● Grande parte das aplicações comerciais, normalmente


transacionais, requer dados persistentes.

● Persistência é a qualidade que um sistema tem de persistir (reter)


dados em algum mecanismo que permita armazenar e recuperar
esses dados para uso futuro.

2
● Projeto de uma Aplicação Java usando JDBC (Java
Database Connectivity)
● Arquitetura em duas camadas: Flexibilidade zero

3
Mapeamento de classes persistentes

● As anotações descrevem o mapeamento


objeto-relacional.

● Definem as regras de associação entre a entidade e a


tabela correspondente, onde serão armazenadas.

● Definem também o relacionamento entre as entidades.

4
Abordagens

● Top-Down

○ Das classes de entidade (anotadas com JPA) para o


esquema do banco de dados

● Bottom-Up

○ Do esquema do banco de dados para a geração das


classes de entidade (anotadas com JPA)

5
Configuração do ambiente de desenvolvimento

Iniciando um projeto com JPA

● Escolha da implementação:
○ Hibernate
○ TopLink
○ Outra

● Escolha o banco de dados e obtenha seu driver JDBC:


○ HSQL: org.hsqidb jdbcDriver
○ MySql: com.mysql. jdbc. Driver
○ Postgres: org.postgresq|.Driver
○ Muitos outros.

6
Mapeamento Básico

● @Entity: roma a classe uma entidade visível ao


Entitymanager.
● @Table: Define a tabela de armazenamento, caso seja
necessário.
● @ld: identifica a propriedade que representa a chave
primária da tabela

7
Mapeamento Básico
● @GeneratedValue: Indica a forma de geração automática do valor do
atribute
○ Parâmetro strategy
■ (default) Generation Type.AUTO (de acordo com o SGBD)
● De acordo com a configuração da tabela no BD
■ Generation Type.IDENTITY (auto increment)
● Não funciona em todos os SGBDs
■ GenetationType.SEQUENCE (auto incremento)
● Auto incremento em uma sequência específica
● Pode-se passar o nome da sequência, Caso não informado,
usa uma sequência global
● A sequência pode ser compartilhada por mais de uma
entidade. Não repetirá o valor entre elas
● Nao funciona em todos as SGBDs
■ GenerationType-TABLE (valores em uma tabela)
● Não é recomendada. Pode gerar sobrecarga de consultas|
● @SequenceGenerator{name=“sequence_name”, 8
sequenceName=“nome_no_sgbd”)
Mapeamento Básico

● @Column: configura o nome da coluna em que será


armazenada a propriedade.

● @Lob: Usada para armazenar tipos grandes com


imagens ou textos. Mapeia propriedades: java.sql.Blob
(binartos) e java.sql.Clob (caracteres).

● @Transient: Define uma propriedade que não será


armazenada.

9
Mapeamento Básico (Observações)

● OBS.1: o Hibernate utiliza o construtor padrão para


instanciar as entidades

● OBS.2: Em caso de chave composta (múltiplas anotações


@Id), é necessário:
○ Implementar a interface Serializable
○ E é desejável:
■ Redefinir o método equals
■ Redefinir o método hashCode

10
Mapeamento de Associações

● De um dos lados:
○ @OneToOne / @OneToMany / @ManyToMany (mappedBy =
“nome”)
● Do outro lado:
○ @OneToOne / @ManyToOne
■ @JoinColumn(name="nome_chave_estranga”,
referencedColumnName="nome_atributo_chave*)
○ @ManyToMany
○ @JoinTable(name = "nome_tabela", joinColumns = {
@JoinColumn(name = "chave_estrangeira_classe_atual", nullable
= false, updatable = false) }, inverseJoinColumns = {
@JoinColumn(name = "chave_estrangeira_classe_atributo”,
nullable = false, updatable = false) })
● OBS.: Os atributos nullable e updatable são opcionais
11
Mapeamento de Associações

● Principais Parâmetros (opcionais):

○ fetch = FetchType.LAZY (default) OU FetchType. EAGER


○ cascade = CascadeType.***
■ ALL = Realiza todas as operações em cascata.

■ DETACH = Realiza a operação detach em cascata.

■ MERGE = Realiza a operação merge em cascata.

■ PERSIST = Realiza a operação persist em cascata.

■ REFRESH = Realiza a operação refresh em cascata.


12
■ REMOVE = Realiza a operação remove em cascata.
Mapeamento de Herança

Há três estratégias de mapeamento:

● Uma única tabela

● Uma tabela para cada classe concreta

● Uma tabela para cada classe

13
Mapeamento de Herança

Tabela Única
● É gerado 1 tabela para toda a hierarquia de classes. Unindo
todos os atributos das classes em uma única tabela.

● A divisão das classes é feita através de um atributo chamado


discriminator.

14
Mapeamento de Herança

Tabela Única Exemplo.

15
Mapeamento de Herança

Tabela por Classe Concreta

● Define que apenas as classes concretas geram suas


respectivas tabelas, ou seja, classes abstratas não tem
tabelas.

16
Mapeamento de Herança

Tabela por Classe Concreta

17
Mapeamento de Herança

Tabela para Cada Classe

● Nessa estratégia nós teremos a Classe Pai e todas suas filhas


geradas no banco de dados fisicamente, sendo que em todas
as classes filhas teremos uma chave estrangeira que
apontará para a classe pai.

18
Mapeamento de Herança

tabela para Cada Classe

19
Linguagem de Programação
Mapeamento objeto relacional; Padrões de acesso a
dados.

Prof. Igor de Moraes Sampaio


igor.sampaio@ifsp.edu.br

Instituto Federal de Educação, Ciência e Tecnologia de São Paulo - Campus São Paulo

Você também pode gostar