Hibernate: Relacionamentos e Herança

Slides:



Advertisements
Apresentações semelhantes
Java Avançado Luiz Carlos d´Oleron SJCP Hibernate II.
Advertisements

Transformação ODMG  Relacional
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
Projeto 1.
Prof.: Bruno Rafael de Oliveira Rodrigues
1 LEIC, LBD 2002, Gabriel David, Ana Paiva, Luis Paulo Reis Geração da base de dados lógica n A ferramenta de transformação do modelo EA para o modelo.
Projeto de Banco de Dados
UML – MODELAÇÃO DA ESTRUTURA Professor Sandro Carvalho.
Sistema Gerenciador de Banco de Dados SGBD
Sistema Gerenciador de Banco de Dados SGBD
Modelagem Orientada a Objetos
1 Orientação a Objetos: Herança Alcides Calsavara.
Mapeamento Objeto Relacional
Banco de Dados – Modelo Relacional Universidade Federal de Santa Catarina Banco de Dados Mapeamento ER- Relacional (Material adaptado das profs. Daniela.
Ferramentas CASE ERwin
Introdução a diagrama de classes e UML
Org. e Projeto de Banco de Dados
Diagrama de Classes.
Caio Nakashima Hibernate Associação Caio Nakashima
Hibernate Apresentação
Ferramentas e Tecnologias II
Mapeamento Objeto-Relacional Eduardo Martins Guerra Instituto Tecnológico de Aeronáutica Curso de Pós-Graduação em Engenharia de Software Programação Distribuída.
Java Persistence Architecture
Herança e Polimorfismo
Mapeamento de Objetos para Tabelas Relacionais
Diagrama de Classes.
Hibernate com JPA Prática
SQL Server 2012 Introdução a Modelagem de Dados
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
Transformação ODMG Relacional. Implementação Relacional de BDs OO Transformação Esquema Objeto Esquema Relacional Transformação Esquema Objeto Esquema.
Introdução a Banco de Dados com exercícios de aplicação
Hibernate Mapeamento O/R.
Mapeamento de Objetos para o Modelo Relacional - Introdução
Hibernate: Consultas Francisco do Nascimento
Hibernate Java avançado – PCC Jobson Ronan
Hibernate Java avançado – PCC Jobson Ronan
REGRAS DE PRODUÇÃO DO MODELO LÓGICO
Modelo de Banco de Dados
Projeto Orientado aos Objetos Prof. Wolley W. Silva
Análise Orientado aos Objetos Prof. Wolley W. Silva
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Classes Abstratas P. O. O. Prof. Ângela e Grace.
Campus de Caraguatatuba Aula 2: Introdução a Tecnologia de BD
Introdução Padrões de Projeto
Generalização e herança Agregação e composição
Banco de Dados I I Comandos SQL
Componentes Avançados JPA - API Prof. Leandro Rubim
Camada de Persistência
IEC Banco de Dados I Aula 04 – SQL (II) Turmas: Sistemas de Informação Professora: André Luiz da Costa Carvalho
Hibernate Universidade Federal do Rio Grande do Sul Instituto de Informática Web e Sistemas de Informação (2004/2005) Objetos Distribuídos Prof. Dr. Cláudio.
Nilson de Souza Rego Jr.1 Persistência de Dados em.
Objetos em Bancos de Dados Relacionais Alcides Calsavara.
SisCol Modelo de Banco de Dados
20/04/2017 Orientação a Objetos 1 1.
Leo Silva Leonardo Murta Luiz Viana Persistência em Java.
Análise e Projeto de Sistemas
Hibernate – componentes, herança, e associações Jobson Ronan
Projeto de Banco de Dados Ceça Moraes Dezembro/09.
Projetar Base de Dados. Copyright © 2002 Qualiti. Todos os direitos reservados. Qualiti Software Processes Projetar base de dados | 2 Objetivos deste.
Diagrama de Classes Herança Dependências.
Transformação ODMG  Relacional. Implementação Relacional de BDs OO Transformação Esquema Objeto  Esquema Relacional.
Desenvolvimento WEB II Professora: Kelly de Paula Cunha.
Copyright © 2011 Ramez Elmasri and Shamkant Navathe slide 1 Tópicos  Introdução  Um exemplo  Características da abordagem de banco de dados  Vantagens.
Fundamentos de Banco de Dados Prof. André Cypriano M. Costa
Modelo de Banco de Dados Jairo Charnoski Janisson Gois.
CIn-UFPE1 Projeto de Gerenciamento de Dados. CIn-UFPE2 Objetivos n Definir o que significa gerenciamento de dados do sistema; n Entender abordagens diferentes.
Application Server & EJB3 Wesley Gonçalves da Silva
Modelagem de Banco de Dados através do ERwin
Prof.: Jean Carlo Mendes
Transcrição da apresentação:

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

Mapeando Componentes

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

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

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

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 }

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

Associações 1-n (@OneToMany) e n-1 (@ManyToOne) Uma universidade tem vários centros e cada centro está associado a uma única universidade

1-n : Mapeando as classes

1-n : Mapeando as classes

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.

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

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

FetchMode.JOIN

FetchMode.SELECT

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

@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

1:1 - Mapeando as classes

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

N:N – Caso simples (sem atributos)

@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

@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

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

Composite-id

N:N+ : Mapeando a classe do relacionamento

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

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

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

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

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

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

Tabela por Hierarquia - TH

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

Tabela por Hierarquia - TH Desvantagens Valores para colunas das subclasses devem sempre permitir NULL Perca da restrição NOT NULL Dados são desnormalizados

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

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

TH – Mapeando as subclasses

Tabela por subclasse - TSC

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

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

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

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

TSC - Mapeando as subclasses

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

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