Você está na página 1de 18

JPA

Relacionamento N x N
(Versão 2018/1)

Prof. Edson F. da Fonseca


MBA, MsC, PMP, Cobit

UNIVERSIDADE CATÓLICA DE BRASÍLIA Tópicos Avançados de Programação


Cursos de Tecnologia da Informação Prof. Edson Francisco da Fonseca
ATIVIDADE SUPERVISIONADA 5

Este ano teremos a Copa do Mundo. Então vamos implementar uma


aplicação WEB que permita o CRUD de:
 Jogador:
• Nome;
• Idade;
• Titular ou reserva;
• Posição: utilizar um enumerador (goleiro, defesa, meio-campo e
ataque).
 Seleção:
• Nome do país;
• Quantidade de títulos.

COM RELACIONAMENTO

UNIVERSIDADE CATÓLICA DE BRASÍLIA Tópicos Avançados de Programação


Cursos de Tecnologia da Informação Prof. Edson Francisco da Fonseca
RELACIONAMENTO, CONSULTA E DAO GENÉRICO

Relacionamento
NxN

UNIVERSIDADE CATÓLICA DE BRASÍLIA Tópicos Avançados de Programação


Cursos de Tecnologia da Informação Prof. Edson Francisco da Fonseca
BANCO DE DADOS
CREATE DATABASE escola;

DROP TABLE IF EXISTS curso;


CREATE TABLE curso (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
nome varchar(50) NOT NULL,
semestres int(10) unsigned NOT NULL,
valor float NOT NULL,
PRIMARY KEY (id)
);

DROP TABLE IF EXISTS aluno;


CREATE TABLE aluno (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
nome varchar(50) NOT NULL,
email varchar(40) DEFAULT NULL,
dtaNasc datetime NOT NULL,
matricula int(10) unsigned DEFAULT NULL,
ativo tinyint(1) DEFAULT NULL,
sexo char(1) NOT NULL,
idCurso int(10) unsigned NOT NULL,
PRIMARY KEY (id),
KEY fk_aluno_curso (idCurso),
CONSTRAINT fk_aluno_curso
UNIVERSIDADE FOREIGN
CATÓLICA KEY (idCurso)
DE BRASÍLIA REFERENCES
Tópicos curso(id)
Avançados de Programação
);
Cursos de Tecnologia da Informação Prof. Edson Francisco da Fonseca
MODELO DO BANCO

aluno curso
id id
nome nome
email semestres
dtaNasc valor
matricula
ativo
sexo
idCurso

UNIVERSIDADE CATÓLICA DE BRASÍLIA Tópicos Avançados de Programação


Cursos de Tecnologia da Informação Prof. Edson Francisco da Fonseca
DIAGRAMA DE CLASSES

Pessoa Não representar


id:long
nome:String
atributos de
email:String associação
dtaNasc:Date

Aluno Curso

matricula:int 0..* 1 id:long


ativo:boolean nome:string
curso:Curso cursa semestres:int
valor:float
alunos:List<Aluno>

UNIVERSIDADE CATÓLICA DE BRASÍLIA Tópicos Avançados de Programação


Cursos de Tecnologia da Informação Prof. Edson Francisco da Fonseca
BANCO DE DADOS
CREATE TABLE professor (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
nome varchar(50) NOT NULL,
email varchar(40) DEFAULT NULL,
dtaNasc datetime NOT NULL,
sexo char(1) NOT NULL,
PRIMARY KEY (id)
);

CREATE TABLE curso_professor (


idCurso int(10) unsigned NOT NULL,
idProfessor int(10) unsigned NOT NULL,
PRIMARY KEY (idCurso, idProfessor),
KEY fk_curso (idCurso),
KEY fk_professor (idProfessor),
CONSTRAINT fk_curso FOREIGN KEY (idCurso) REFERENCES curso(id),
CONSTRAINT fk_professor FOREIGN KEY (idProfessor) REFERENCES
professor(id)
);

UNIVERSIDADE CATÓLICA DE BRASÍLIA Tópicos Avançados de Programação


Cursos de Tecnologia da Informação Prof. Edson Francisco da Fonseca
MODELO DO BANCO

aluno curso curso_professor professor


id id idCurso id
nome nome idProfessor nome
email semestres email
dtaNasc valor dtaNasc
matricula sexo
ativo
sexo
idCurso

UNIVERSIDADE CATÓLICA DE BRASÍLIA Tópicos Avançados de Programação


Cursos de Tecnologia da Informação Prof. Edson Francisco da Fonseca
DIAGRAMA DE CLASSES

Pessoa

nome:String
email:String
dtaNasc:Date

Aluno Curso Professor

id:long * 1 id:long * * id:long


matricula:int nome:string cursos:List<Curso>
ativo:boolean semestres:int
curso:Curso valor:float
alunos:List<Aluno>

UNIVERSIDADE CATÓLICA DE BRASÍLIA Tópicos Avançados de Programação


Cursos de Tecnologia da Informação Prof. Edson Francisco da Fonseca
RELACIONAMENTO N..N (UNIDIRECIONAL)
Em “br.ucb.modelo” a classe “Professor”
@Entity
public class Professor extends Pessoa implements Serializable {
private long id;
@ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinTable(name="curso_professor",
joinColumns=@JoinColumn(name="idProfessor"),
inverseJoinColumns=@JoinColumn(name="idCurso")
)
private List<Curso> cursos;
...

UNIVERSIDADE CATÓLICA DE BRASÍLIA Tópicos Avançados de Programação


Cursos de Tecnologia da Informação Prof. Edson Francisco da Fonseca
RELACIONAMENTO N..N (UNIDIRECIONAL)
@Entity
public class Professor ... {
private long id;
@ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
:
:

fetch:
 EAGER (impaciente): Carrega todos os objetos do relacionamento
 LAZY (preguiçoso): Carrega os objetos apenas quando requisitados

UNIVERSIDADE CATÓLICA DE BRASÍLIA Tópicos Avançados de Programação


Cursos de Tecnologia da Informação Prof. Edson Francisco da Fonseca
RELACIONAMENTO N..N (UNIDIRECIONAL)
@Entity
public class Professor ... {
private long id;
@ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
:
:

cascade:
• ALL = Realiza todas as operações em cascata
• DETACH = Realiza a operação detach em cascata
• MERGE = Realiza a operação merge em cascata
• PERSIST = Realiza a operação persist em cascata
• REFRESH = Realiza a operação refresh em cascata
• REMOVE = Realiza a operação remove em cascata

UNIVERSIDADE CATÓLICA DE BRASÍLIA Tópicos Avançados de Programação


Cursos de Tecnologia da Informação Prof. Edson Francisco da Fonseca
RELACIONAMENTO N..N (UNIDIRECIONAL)
@Entity
public class Professor ... {
private long id;
@ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinTable(name="curso_professor",
joinColumns=@JoinColumn(name="idProfessor"),
inverseJoinColumns=@JoinColumn(name="idCurso")
)
private List<Curso> cursos;

professor curso_professor curso


id idCurso id
nome idProfessor nome
email semestres
dtaNasc valor
sexo

UNIVERSIDADE CATÓLICA DE BRASÍLIA Tópicos Avançados de Programação


Cursos de Tecnologia da Informação Prof. Edson Francisco da Fonseca
RELACIONAMENTO N x N

Perguntas?
UNIVERSIDADE CATÓLICA DE BRASÍLIA Tópicos Avançados de Programação
Cursos de Tecnologia da Informação Prof. Edson Francisco da Fonseca
REFERÊNCIAS BIBLIOGRAFICAS
 http://www.hibernate.org/
 http://docs.jboss.org/hibernate/core/3.6/reference/pt-BR/pdf/hibernate_reference.pdf
 http://pt.wikipedia.org/wiki/Hibernate
 http://www.roseindia.net/hibernate/hibernate4/HibernateOnetoMany.shtml
 http://groups.google.com/group/javasf/browse_thread/thread/96899dd04effcf6f
 http://www.guj.com.br/java/145022-como-passar-parametro-do-commandlink--para-o-
java
 http://www.archivum.info/javasf@googlegroups.com/2010-10/00089/Re-(javasf)-f-
setPropertyActionListener-Atrasado.html
 http://www.guj.com.br/java/145022-como-passar-parametro-do-commandlink--para-o-
java
 http://www.guj.com.br/java/238100-tag-fview-gera-nullpointerexceptionresolvido
 http://www.guj.com.br/java/259561-resolvido-erro-hibernate---dialect-
 http://www.guj.com.br/java/148306-problemas-com-conversao-de-tipo-de-dados
 http://www.jardelmorais.com/banco-de-dados/hibernate/quando-usar-o-fetch-lazy-e-o-
fetch-eager/

UNIVERSIDADE CATÓLICA DE BRASÍLIA Tópicos Avançados de Programação


Cursos de Tecnologia da Informação Prof. Edson Francisco da Fonseca
Obrigado!!!

Prof. Edson F. da Fonseca


edsonf@ucb.br

UNIVERSIDADE CATÓLICA DE BRASÍLIA Tópicos Avançados de Programação


Cursos de Tecnologia da Informação Prof. Edson Francisco da Fonseca
JPA – RELACIONAMENTO N x N

Atividade
Supervisionada!!!

UNIVERSIDADE CATÓLICA DE BRASÍLIA Tópicos Avançados de Programação


Cursos de Tecnologia da Informação Prof. Edson Francisco da Fonseca
ATIVIDADE SUPERVISIONADA 6
Este ano teremos a Copa do Mundo. Então vamos implementar uma
aplicação WEB que permita o CRUD de:
 Jogador:
• Nome;
• Idade;
• Titular ou reserva;
• Posição: utilizar um enumerador (goleiro, defesa, meio-campo e ataque).
 Seleção:
• Nome do país;
• Quantidade de títulos.
 Hotel:
• Nome do hotel;
• Cidade.

COM RELACIONAMENTO:
Uma seleção possui vários jogadores e um hotel recebe várias seleções.

UNIVERSIDADE CATÓLICA DE BRASÍLIA Tópicos Avançados de Programação


Cursos de Tecnologia da Informação Prof. Edson Francisco da Fonseca

Você também pode gostar