Módulo 03. Mapeando Associações/Relacionamentos. Raphaela Galhardo. raphaela@jeebrasil.com.br



Documentos relacionados
Hibernate. Mapeamento Objeto-Relacional. Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior

Mapeando Relacionamentos Entre Classes com Anotações Hibernate Por: Raphaela Galhardo Fernandes Gleydson de Azevedo F. Lima

Parte III Persistência entre Modelos de Dados

HIBERNATE Criando um projeto em Java + Hibernate do zero

Mapeamento Lógico/Relacional com JPA

JPA Com Hibernate Aula 2

UFG - Instituto de Informática

Hibernate com Anotações

Aula 2 - Revisão de JPA (Java Persistence API)

Mapeando Relacionamentos entre Entidades JPA. Prof. Fellipe Aleixo

Aula 2 - Revisão de JPA (Java Persistence API)


JPA Com Hibernate. Paulo Ricardo Lisboa de Almeida. Dados Transientes e Relacionamentos. 1 Universidade Positivo

Hibernate. Mapeamento O/R Marcio Aguiar Ribeiro

UFG - Instituto de Informática

Java Persistence API. Entity Entity Campos e Propriedades Entity Chaves Primárias Entity Associações

Persistência de Dados em Java com JPA e Toplink

Desvendando o Hibernate

JPA (Java Persistence API) Marcos Kalinowski

Hibernate Envers Easy Entity Auditing

Desmistificando o Hibernate Envers em 10 passos

Persistência de dados com JPA. Hélder Antero Amaral Nunes

JPA Java Persistence API. Prof. Ramon Chiara

Evento.java. package dominio;

Parte II Persistência entre Modelos de Dados

Mapeamento Objeto-Relacional

JPA Passo a Passo. Henrique Eduardo M. Oliveira henrique@voffice.com.br. Globalcode Open4Education

Curso de Java. Acesso a banco de dados através do Hibernate. Todos os direitos reservados Klais

Resolvendo objeto-relacional impedance mismatch com hibernate

Introdução à JPA-Java Persistence API

UFG - Instituto de Informática

RELACIONAMENTOS ENTRE OS OBJETOS NO FRAMEWORK HIBERNATE Elio Lovisi Filho 1 Ronney Moreira de Castro 2 RESUMO

SQL Linguagem de Manipulação de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Persistência com JPA2 e Hibernate TREINAMENTOS

Comandos de Manipulação

Struts 2 : Projeto e Programação Editora: Ciência Moderna Autor: Antunes Budi Kurniawan Número de páginas: 600

JPA: Persistência padronizada em Java

JPA - Java Persistence API. Entity. Entity Campos e Propriedades Entity Chaves Primárias Entity Associações. Entity Manager

JPA - Java Persistence API. Entity. Entity Campos e Propriedades Entity Chaves Primárias Entity Associações. Entity Manager

Aula 4. Carlos Eduardo de Carvalho Dantas

UNIVERSIDADE FEDERAL DE SANTA MARIA - UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN BANCO DE DADOS II

Introdução ao Hibernate 3

Tecnologias Java JDBC. Marcio Seiji Oyamada

ARQUITETURA SISGRAD. Manual de Utilização. Versão: 2.0. Criação: 05 de julho de 2007 Autor: André Penteado

Mapeando Entidades. Abaixo iremos mapear nossas classes. Fornecedor.java package entidades;

PERSISTÊNCIA EM BANCO DE DADOS: UM ESTUDO PRÁTICO

Java para WEB com Hibernate e Struts 2. Duração 52 horas/aula. Objetvo

Programação WEB II. PHP e Banco de Dados. progweb2@thiagomiranda.net. Thiago Miranda dos Santos Souza

JPA Mini Livro Primeiros passos e conceitos detalhados

Persistindo dados com TopLink no NetBeans

Curso PHP Aula 08. Bruno Falcão

1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF)

Enterprise Java Beans (IV)

Analisando a performance das Estratégias que realizam o Mapeamento Objeto Relacional no JPA

Ex.: INSERT INTO tmpautor (CDAUTOR, NMAUTOR) VALUES (1, Renato Araújo )

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

Databases. Ferramentas gráficas na modelação lógica das BD. O Modelo Entidade-Relação (Associação) O Modelo de Classes no UML

TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS

Java Persistence Query Language JPQL

Projeto e Implementação

EXEMPLOS DE COMANDOS NO SQL SERVER

Memória de aula Semanas 15 e 16

Integrando recuperação de informação em banco de dados com Hibernate Search

O módulo possui um submódulo para a definição dos schemas da base de dados.


SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Modelo de Dados Relacional Restrições de um Banco de Dados Relacional

Introdução ao SQL. Aécio Costa

Programação SQL. Manipulação de Dados. DML Data Manipulation Language

Faculdade Pitágoras 16/08/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

Como usar o SQLReactor para persistência de objetos PHP num banco de dados

JPA e Hibernate por Thiago Faria e Normandes Junior

Exercícios de Lógica Exercícios de Fixação 08

Linguagem SQL. Comandos Básicos

Conceitos básicos. Funcionario SIAPE Nome Lotacao Cargo Salario Admissao

PHP INTEGRAÇÃO COM MYSQL PARTE 1

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

SQL é uma linguagem de consulta que implementa as operações da álgebra relacional de forma bem amigável.

Projeto de Banco de Dados: Empresa X

AULA 8 CRIANDO UMA CLASSE EM PHP INTERAGINDO COM BANCO DE DADOS - COM RELACIONAMENTO ENTRE TABELAS

Hibernate na sua aplicação JavaWeb

Auditando persistência com JPA

Capítulo 22. Associações entre Classes. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

EXERCÍCIOS PRÁTICOS. Banco de Dados

1. Assinale as afirmações que são verdadeiras e as que são falsas, corrigindo-as:

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL

Aula Extra Conexão ODBC para aplicações Delphi 7 que usam SQL Server 2005

Structured Query Language (SQL)

Java Persistence API (JPA)

ADMINISTRAÇÃO DE BANCO DE DADOS

Treinamento sobre SQL

Álgebra Relacional. Conjunto de operações que usa uma ou duas relações como entrada e gera uma relação de saída. Operações básicas:

Padrão J2EE Data Access Object (DAO)

Banco de Dados. Prof. Leonardo Barreto Campos 1

MC536 Bancos de Dados: Teoria e Prática

Banco de Dados Modelo Entidade-Relacionamento. Frederico D. Bortoloti

Especificação do Trabalho

Criando e executando consultas. Formas de criar consultas

Transcrição:

Módulo 03 Mapeando Associações/Relacionamentos Raphaela Galhardo raphaela@jeebrasil.com.br

Associações Um-para-um; Muitos-para-um; Um-para-muitos; Muitos-para-muitos.

Associações - OneToMany Exemplo: Uma universidade possui N centros @OneToMany;

Associações - OneToMany import java.util.collection; import javax.persistence.*; import org.hibernate.annotations.cascade; import org.hibernate.annotations.cascadetype; @Entity @Table(schema="anotacoes") public class Universidade { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name="id_universidade") private int id; private String nome; } @OneToMany(mappedBy="universidade",fetch = FetchType.LAZY) @Cascade(CascadeType.ALL) @OrderBy( nome ASC ) private Collection<Centro> centros; //Métodos getters e setters...

Associações - OneToMany @OneToMany: mappedby: atributo no relacionamento muitospara-um; fetch: indica quando o conteúdo será trazido do banco de dados; cascade: indica ação em cascata do relacionamento: (javax.persistence.cascadetype) CascadeType.PERSIST; CascadeType.REMOVE; CascadeType.REFRESH; CascadeType.MERGE; CascadeType.ALL;

Associações - OneToMany @OneToMany: fetch: (javax.persistence.fetchtype) FetchType.EAGER: sempre trazer; FetchType.LAZY: trazer apenas quando necessário.

Associações - OneToMany @Cascade: indica ação em cascata do relacionamento: (org.hibernate.annotations.cascadetype) CascadeType.PERSIST; CascadeType.SAVE_UPDATE; CascadeType.REMOVE; CascadeType.REPLICATE; CascadeType.LOCK; CascadeType.REFRESH; CascadeType.MERGE; CascadeType.EVICT; CascadeType.ALL.

Associações - OneToMany @OrderBy: Ordena coleção <atributo> ASC <atributo> DESC

Associações - OneToMany Exemplo: @Cascade(CascadeType.ALL) Universidade univ = new Universidade(); univ.setnome( Universidade Potiguar"); Centro centro1 = new Centro(); centro1.setnome("centro de Tecnologia"); centro1.setuniversidade(univ); //Associa à universidade Centro centro2 = new Centro(); centro2.setnome("centro de Humanas"); centro2.setuniversidade(univ); //Associa à universidade univ.setcentros(new HashSet<Centro>()); univ.getcentros().add(centro1); univ.getcentros().add(centro2); session.save(univ);

Associações - OneToMany Exemplo: @Cascade(CascadeType.ALL) Hibernate: insert into anotacoes.universidade (nome, id_universidade) values (?,?) Hibernate: insert into anotacoes.centro (nome, id_universidade, id_centro) values (?,?,?) Hibernate: insert into anotacoes.centro (nome, id_universidade, id_centro) values (?,?,?)

Associações - OneToMany Exemplo: fetch //... Session session = sf.opensession(); //Consulta de uma linha na tabela universidade //com valor de chave primária = 100 Universidade univ = (Universidade) session.get(universidade.class, 100); session.close(); //...

Associações - OneToMany Exemplo: fetch = FetchType.EAGER Hibernate: select universida0_.id_universidade as id1_3_1_, universida0_.nome as nome3_1_, centros1_.id_universidade as id3_3_, centros1_.id_centro as id1_3_, centros1_.id_centro as id1_1_0_, centros1_.nome as nome1_0_, centros1_.id_universidade as id3_1_0_ from anotacoes.universidade universida0_ left outer join anotacoes.centro centros1_ on universida0_.id_universidade = centros1_.id_universidade where universida0_.id_universidade=?

Associações - OneToMany Exemplo: fetch = FetchType.LAZY Hibernate: select universida0_.id_universidade as id1_3_0_, universida0_.nome as nome3_0_ from anotacoes.universidade universida0_ where universida0_.id_universidade=?

Associações - OneToMany Exemplo: fetch = FetchType.LAZY //Consulta de uma linha na tabela universidade //com valor de chave primária = 100. //fetch=fetchtype.lazy. Não traz dados da coleção centros Universidade univ = (Universidade) session.get(universidade.class, 100); //Acesso à coleção centros, de forma que os //dados serão buscados univ.getcentros().iterator(); session.close();

Associações - OneToMany Exemplo: fetch = FetchType.LAZY Hibernate: select universida0_.id_universidade as id1_3_0_, universida0_.nome as nome3_0_ from anotacoes.universidade universida0_ where universida0_.id_universidade=? Hibernate: select centros0_.id_universidade as id3_1_, centros0_.id_centro as id1_1_, centros0_.id_centro as id1_1_0_, centros0_.nome as nome1_0_, centros0_.id_universidade as id3_1_0_ from anotacoes.centro centros0_ where centros0_.id_universidade=?

Associações - ManyToOne Exemplo: Um centro pertence a uma única universidade @ManyToOne.

Associações - ManyToOne //... @Entity @Table(schema="anotacoes") public class Centro { @Id @GeneratedValue( strategy = GenerationType.SEQUENCE) @Column(name="id_centro") private int id; private String nome; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name="id_universidade", insertable=true, updatable=true) @Fetch(FetchMode.JOIN) @Cascade(CascadeType.SAVE_UPDATE) private Universidade universidade; } //Métodos getters e setters...

Associações - ManyToOne @ManyToOne fetch: FetchType.EAGER; FetchType.LAZY. cascade. @JoinColumn: informa nome da coluna chave estrangeira: name = nome da coluna; insertable = atributo deve ser inserido ou não; updatable = atributo deve ser atualizado ou não.

Associações - ManyToOne @Fetch: define como o atributo deve ser recuperado do banco de dados: FetchMode.JOIN: utiliza outer join; FetchMode.SELECT: utiliza novo select; FetchMode.SUBSELECT: utiliza uma consulta subselect. Não permitido para @ManyToOne.

Associações - ManyToOne Exemplo Uso da anotação @Fetch: //... Session session = sf.opensession(); //Consulta de uma linha na tabela centro //com valor de chave primária = 110 Centro centro = (Centro)session.get(Centro.class, 110); session.close(); //...

Associações - ManyToOne @Fetch (FetchMode.JOIN) Hibernate: select centro0_.id_centro as id1_1_1_, centro0_.nome as nome1_1_, centro0_.id_universidade as id3_1_1_, universida1_.id_universidade as id1_3_0_, universida1_.nome as nome3_0_ from anotacoes.centro centro0_ left outer join anotacoes.universidade universida1_ on centro0_.id_universidade = universida1_.id_universidade where centro0_.id_centro=?

Associações - ManyToOne @Fetch (FetchMode.SELECT) Hibernate: select centro0_.id_centro as id1_1_0_, centro0_.nome as nome1_0_, centro0_.id_universidade as id3_1_0_ from anotacoes.centro centro0_ where centro0_.id_centro=? Hibernate: select universida0_.id_universidade as id1_3_0_, universida0_.nome as nome3_0_ from anotacoes.universidade universida0_ where universida0_.id_universidade=?

Exercício Persistir os dados via Hibernate; Exibir o cliente e o veículo de uma reserva; Exibir as reservas de um veículo; Exibir as reservas de um cliente.

Associações - ManyToMany Nova tabela entre o relacionamento;

Associações - ManyToMany @Entity @Table(name="departamento", schema="anotacoes") public class Departamento { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name="id_departamento") private int id; @Column(nullable = false, insertable=true, updatable=true) private String nome; //... @Column(nullable = false, insertable=true, updatable=true, length=6) private String sigla;

Associações - ManyToMany //... @ManyToMany(fetch=FetchType.LAZY) @JoinTable( name="departamento_curso", schema="anotacoes", joincolumns = @JoinColumn(name="id_departamento"), inversejoincolumns = @JoinColumn(name="id_curso")) private Collection<Curso> cursos; @ManyToOne(fetch=FetchType.EAGER) @JoinColumn(name="id_centro", insertable=true, updatable=true) private Centro centro; } //Métodos setters e getters //...

Associações - ManyToMany @Entity @Table(name= curso", schema="anotacoes") public class Curso { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name= id_curso") private int id; //... Outros atributos @ManyToMany(fetch=FetchType.LAZY) @JoinTable( name="departamento_curso", schema="anotacoes", joincolumns={@joincolumn(name="id_curso")}, inversejoincolumns={@joincolumn(name="id_departamento")}) private Collection<Departamento> departamentos; } //Métodos setters getters //...

Associações - ManyToMany @ManyToMany fetch: FetchType.EAGER; FetchType.LAZY. cascade.

Associações - ManyToMany @JoinTable: informa qual é a tabela intermediária: name: nome da tabela; schema: esquema em que se encontra; joincolumns: qual coluna o representa na tabela intermediária; inversejoincolumns: qual coluna representa a outra entidade do relacionamento.

Associações - ManyToMany Departamento depart = new Departamento(); depart.setnome("departamento 1"); depart.setsigla("dep.01"); //Busca objeto centro na base de dados com //identificador igual a 110 depart.setcentro((centro)session.get(centro.class, 110)); //Busca objeto curso na base de dados com //identificador igual a 220 Curso curso = (Curso)session.get(Curso.class, 220); depart.setcursos(new ArrayList<Curso>()); //Adiciona curso na coleção do departamento depart.getcursos().add(curso); //Persiste departamento session.save(depart);

Associações - ManyToMany Hibernate: select centro0_.id_centro as id1_1_1_, centro0_.nome as nome1_1_, centro0_.id_universidade as id3_1_1_, universida1_.id_universidade as id1_5_0_, universida1_.nome as nome5_0_ from anotacoes.centro centro0_ left outer join anotacoes.universidade universida1_ on centro0_.id_universidade=universida1_.id_universidade where centro0_.id_centro=? Hibernate: select curso0_.id_curso as id1_3_0_, curso0_.codigo as codigo3_0_, curso0_.nome as nome3_0_, curso0_.sigla as sigla3_0_ from anotacoes.curso curso0_ where curso0_.id_curso=? Hibernate: select nextval ('hibernate_sequence') Hibernate: insert into anotacoes.departamento (nome, sigla, id_centro, id_departamento) values (?,?,?,?) Hibernate: insert into anotacoes.departamento_curso (id_departamento, id_curso) values (?,?)

Exercício Persistir via Hibernate: Revista; 3 Artigos; 1 Artigo com 3 autores. Recuperar dados.

Associações ManyToMany Nova tabela entre o relacionamento com outros atributos;

Associações ManyToMany Classe extra para a chave composta: import java.io.serializable; import javax.persistence.*; @Embeddable public class DepartamentoCursoPK implements Serializable{ @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name="id_departamento") private Departamento departamento; } @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "id_curso") private Curso curso; //Métodos getters e setters...

Associações ManyToMany import java.util.date; import javax.persistence.*; @Entity @Table(name="departamento_curso", schema="anotacoes") public class DepartamentoCurso { @EmbeddedId private DepartamentoCursoPK chavecomposta; } @Column(name="data") @Temporal(TemporalType.DATE) private Date data; //Métodos getters e setters //...

Associações ManyToMany //... Departamento d = (Departamento) session.get(departamento.class, 1); Curso c = (Curso)session.get(Curso.class, 1); //Define chave composta DepartamentoCursoPK dcid = new DepartamentoCursoPK(); dcid.setdepartamento(d); dcid.setcurso(c); //Define relacionamento com atributo DepartamentoCurso dc = new DepartamentoCurso(); dc.setchavecomposta(dcid); dc.setdata(new Date()); session.save(dc); //...

Associações ManyToMany Hibernate: select * from anotacoes.departamento departamen0_ left outer join anotacoes.centro centro1_ on departamen0_.id_centro=centro1_.id_centro left outer join anotacoes.universidade universida2_ on centro1_.id_universidade=universida2_.id_universidade where departamen0_.id_departamento=? Hibernate: select curso0_.id_curso as id1_3_0_, curso0_.codigo as codigo3_0_, curso0_.nome as nome3_0_, curso0_.sigla as sigla3_0_ from anotacoes.curso curso0_ where curso0_.id_curso=? Hibernate: insert into anotacoes.departamento_curso (data, id_departamento, id_curso) values (?,?,?)

Exercício Incluir atributo data no relacionamento N-N; Persistir os dados via Hibernate; Retornar todos os projetos de uma empresa; Retornar todos os engenheiros de um projeto; Atualizar dados de um Engenheiro.

Associações OneToOne Formas de Mapeamento: @ManyToOne; @OneToOne.

Associações OneToOne Tabela endereco vai ter referência para universidade //... @Entity @Table(schema="anotacoes") public class Endereco { //... @OneToOne @JoinColumn( name = "id_universidade", unique = true nullable = false, updatable = false ) private Universidade universidade; } //...

Associações OneToOne //... @Entity @Table(schema="anotacoes") public class Universidade { //... @OneToOne( mappedby = "universidade", cascade = CascadeType.ALL ) private Endereco endereco; } //...

Associações OneToOne //... Endereco endereco = new Endereco(); endereco.setrua("av. Senador Salgado Filho"); endereco.setnumero(1034); endereco.setbairro("lagoa Nova"); endereco.setcidade("natal"); endereco.setuf("rn"); endereco.setcep(59067710); Universidade universidade = new Universidade(); universidade.setnome("universidade Teste"); endereco.setuniversidade(universidade); universidade.setendereco(endereco); //... session.save(universidade);

Associações OneToOne Hibernate: select nextval ('hibernate_sequence') Hibernate: select nextval ('hibernate_sequence') Hibernate: insert into anotacoes.universidade (nome, id_universidade) values (?,?) Hibernate: insert into anotacoes.endereco (rua, numero, bairro, cidade, uf, cep, id_universidade, id_endereco) values (?,?,?,?,?,?,?,?)

Exercício

Exercício