hibernate: relacionamentos e herança francisco do nascimento psc - programação de softwares...
TRANSCRIPT
![Page 1: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/2.jpg)
2
Mapeando Componentes
![Page 3: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/14.jpg)
FetchMode.JOIN
![Page 15: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/15.jpg)
FetchMode.SELECT
![Page 16: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/24.jpg)
Composite-id
![Page 25: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/27.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/28.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/29.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/31.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/32.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/33.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/34.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/35.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/36.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/37.jpg)
TH – Mapeando as subclasses
![Page 38: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/38.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/39.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/40.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/41.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/42.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/43.jpg)
TSC - Mapeando as subclasses
![Page 44: Hibernate: Relacionamentos e Herança Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, outubro de 2008](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/44.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062818/570638491a28abb8238f4656/html5/thumbnails/45.jpg)
Referências
Hibernate com Anotações Raphaella Galhardo e Gleydson Lima(www.j2eebrasil.com.br)