hibernate: relacionamentos e herança francisco do nascimento psc - programação de softwares...

45
Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

Upload: thalita-mauricio

Post on 07-Apr-2016

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

Hibernate: Relacionamentos e Herança

Francisco do NascimentoPSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

Page 2: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

2

Mapeando Componentes

Page 3: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

3

Mapeando Componentes User

Representa uma Entidade Possui identidade própria

Chave primária na base de dados Uma referência para User é persistida como uma

chave estrangeira Tem seu próprio ciclo de vida

Existe independentemente de qualquer outra entidade

Page 4: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

4

Mapeando Componentes

Address Representa um Componente Não possui identidade própria Pertence a Entidade User Estado é persistido no registro referente ao User a qual

está associado Ciclo de vida dependente de User Se dois Usuários morarem no mesmo apartamento,

cada um tem uma referência para um objeto distinto Comportamento similar a tipos como String e Integer

Page 5: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

5

Mapeando Componentes

@Embeddablepublic class Address {

@Column(name = "ADDRESS_STREET", nullable = false)private String street;

@Column(name = "ADDRESS_CITY", nullable = false)private String city;

//gets e sets...}

Page 6: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

6

Mapeando Componentes

@Entity@Table(name = "USERS")public class User {

@Id@GeneratedValue(strategy=GenerationType.AUTO)private Long id;

private String name;

private String email;

private Address address;

//gets e sets}

Page 7: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

7

Associação entre Entidades Podem ser de diversas multiplicidades

One-to-many One-to-one Many-to-many Many-to-one

Para associações one-to-many e many-to-many é necessário a utilização de coleções

Page 8: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

8

Associações 1-n (@OneToMany) e n-1 (@ManyToOne) Uma universidade tem vários centros e cada

centro está associado a uma única universidade

Page 9: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

1-n : Mapeando as classes

Page 10: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

1-n : Mapeando as classes

Page 11: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

Tipos de Cascata (CascadeType) CascadeType.PERSIST: inseridos quando o pai for

inserido CascadeType.SAVE_UPDATE: inseridos ou

atualizados quando o pai for inserido ou atualizado CascadeType.REMOVE: removido quando o pai for

removido CascadeType.MERGE: atualizados quando o pai for

atualizado CascadeType.ALL: junção de todos os tipos de

cascade.

Page 12: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

Associações N:1 (Many-to-one) @JoinColumn informa a chave estrangeira

Page 13: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

N:1 - Anotações na associação Insertable: indica que o atributo será inserido

quando o objeto for inserido Updatable: indica que o atributo será atualizado

quando o objeto for atualizado @Fetch: forma como o atributo será consultado

FetchMode.JOIN: utiliza um outer join FetchMode.SELECT: utiliza um novo select FetchMode.SUBSELECT: utiliza um subselect adicional

para carregar coleções. Não permitido para @ManyToOne

Page 14: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

FetchMode.JOIN

Page 15: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

FetchMode.SELECT

Page 16: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

16

Associações 1:1 (One-to-One)

Page 17: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

17

@OneToOne O atributo deve conter a Annotation

@OneToOne Se o relacionamento for bidirecional os dois

atributos devem conter a Annotation Em uma das propriedades deve ser

adicionada a Annotation @JoinColumn Na outra propriedade deve ser adicionado o

atributo mappedBy à Annotation @OneToOne

Page 18: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

1:1 - Mapeando as classes

Page 19: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

19

Associações N:N (Many-to-Many)

Page 20: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

N:N – Caso simples (sem atributos)

Page 21: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

21

@ManyToMany O atributo deve conter a Annotation

@ManyToMany Se o relacionamento for bidirecional os dois

atributos devem conter a Annotation Em uma das propriedades deve ser

adicionada a Annotation @JoinTable Na outra propriedade deve ser adicionado o

atributo mappedBy à Annotation @ManyToMany

Page 22: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

22

@JoinTable Contém o nome da tabela de relacionamento O atributo joinColumns mapeia a coluna

associada à entidade mapeada O tipo do atributo é @JoinColumn

Annotation dentro de annotation O atributo inverseJoinColumns mapeia a

coluna associada à outra entidade O tipo do atributo também é @JoinColumn

Page 23: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

N:N – Caso 2 (Com atributos)

Classe representando o relacionamento: DepartamentoCurso, contendo um atributo do composite-id e os demais atributos Composite-id mapeada com @EmbeddedId

Classe do Composite-id (DepartamentoCursoPK) contendo as chaves estrangeiras A composite-id deve ser mapeada com @Embeddable e

seus atributos com @ManyToOne Deve implementar a interface Serializable

Page 24: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

Composite-id

Page 25: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

N:N+ : Mapeando a classe do relacionamento

Page 26: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

26

Mapeando Herança: Estratégias Tabela por classe concreta (TCC) Tabela por hierarquia (TH) Tabela por subclasse (TSC)

Page 27: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

27

Uma tabela por Classe Concreta Cada classe concreta => tabela diferente com todas as

propriedades

Page 28: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

28

Uma tabela por Classe Concreta Estratégia mais simples Todas propriedades de uma classe, incluindo

as herdadas, são mapeadas para a mesma tabela

Mapeamento convencional pode ser utilizado

Page 29: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

29

TCC - Mapeando a Superclasse Mapear a super classe através da Annotattion

@MappedSuperclass

Page 30: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

30

TCC - Mapeando as Subclasses Nenhuma configuração extra é necessária

Page 31: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

31

Não é necessário mapear o identificador O Identificador é mapeado na super-classe

TCC - Mapeando as Subclasses

Page 32: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

32

Tabela por Hierarquia - TH

Page 33: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

33

Tabela por Hierarquia - TH Toda uma hierarquia é mapeada em uma

única tabela A tabela possui colunas para todas as

propriedades de todas as entidades da hierarquia

A subclasse de cada registro é identificada através de uma coluna discriminatória

Vantagem Possui a melhor performance

Page 34: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

34

Tabela por Hierarquia - TH

Desvantagens Valores para colunas das subclasses devem sempre

permitir NULL Perca da restrição NOT NULL

Dados são desnormalizados

Page 35: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

35

O valor do atributo strategy deve ser mudado para InheritanceType.SINGLE_TABLE

TH - Mapeando a Superclasse

Page 36: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

TH - Mapeando as subclasses

Definindo o valor do discriminador para cada subclasse

Page 37: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

TH – Mapeando as subclasses

Page 38: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

38

Tabela por subclasse - TSC

Page 39: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

39

Tabela por subclasse - TSC Uma tabela para cada subclasse, incluindo as

abstratas, que possuem propriedades para serem persistidas

Relação de herança é representada por uma chave estrangeira

As tabelas não contém colunas para as propriedades herdadas

A chave primária é também uma chave estrangeira para a super classe

Page 40: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

40

Tabela por subclasse - TSC

Vantagens Os dados são normalizados Restrições podem ser mantidas

Desvantagens Performance pode ser muito baixa para hierarquias

complexas Necessidade de muitas junções

Page 41: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

41

O valor do atributo strategy deve ser mudado para InheritanceType.JOINED

TSC - Mapeando a Superclasse

Page 42: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

TSC - Mapeando as subclasses É especificada a coluna que junta as tabelas

Page 43: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

TSC - Mapeando as subclasses

Page 44: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

Versionamento (Controle de concorrência) Tipos possíveis: numéricos, Date ou

Calendar

Page 45: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008

Referências

Hibernate com Anotações Raphaella Galhardo e Gleydson Lima(www.j2eebrasil.com.br)