A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Hibernate: Relacionamentos e Herança

Apresentações semelhantes


Apresentação em tema: "Hibernate: Relacionamentos e Herança"— Transcrição da apresentação:

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

2 Mapeando Componentes

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

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

5 Mapeando Componentes @Embeddable public class Address {
@Column(name = "ADDRESS_STREET", nullable = false) private String street; @Column(name = "ADDRESS_CITY", nullable = false) private String city; //gets e sets... }

6 Mapeando Componentes @Entity @Table(name = "USERS")
public class User { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; private String name; private String ; private Address address; //gets e sets }

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

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

9 1-n : Mapeando as classes

10 1-n : Mapeando as classes

11 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.

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

13 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

14 FetchMode.JOIN

15 FetchMode.SELECT

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

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 Na outra propriedade deve ser adicionado o atributo mappedBy à

18 1:1 - Mapeando as classes

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

20 N:N – Caso simples (sem atributos)

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 Na outra propriedade deve ser adicionado o atributo mappedBy à

22 @JoinTable Contém o nome da tabela de relacionamento
O atributo joinColumns mapeia a coluna associada à entidade mapeada O tipo do atributo Annotation dentro de annotation O atributo inverseJoinColumns mapeia a coluna associada à outra entidade O tipo do atributo também

23 N:N – Caso 2 (Com atributos)
Classe representando o relacionamento: DepartamentoCurso, contendo um atributo do composite-id e os demais atributos Composite-id mapeada Classe do Composite-id (DepartamentoCursoPK) contendo as chaves estrangeiras A composite-id deve ser mapeada e seus atributos Deve implementar a interface Serializable

24 Composite-id

25 N:N+ : Mapeando a classe do relacionamento

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

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

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

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

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

31 TCC - Mapeando as Subclasses
Não é necessário mapear o identificador O Identificador é mapeado na super-classe

32 Tabela por Hierarquia - TH

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

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

35 TH - Mapeando a Superclasse
O valor do atributo strategy deve ser mudado para InheritanceType.SINGLE_TABLE

36 TH - Mapeando as subclasses
Definindo o valor do discriminador para cada subclasse

37 TH – Mapeando as subclasses

38 Tabela por subclasse - TSC

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

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

41 TSC - Mapeando a Superclasse
O valor do atributo strategy deve ser mudado para InheritanceType.JOINED

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

43 TSC - Mapeando as subclasses

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

45 Referências Hibernate com Anotações Raphaella Galhardo e Gleydson Lima
(


Carregar ppt "Hibernate: Relacionamentos e Herança"

Apresentações semelhantes


Anúncios Google