• Nenhum resultado encontrado

if992 15 Lista exercicios 13

N/A
N/A
Protected

Academic year: 2021

Share "if992 15 Lista exercicios 13"

Copied!
8
0
0

Texto

(1)

Universidade Federal de Pernambuco

Centro de Informática - Sistemas de Informação

IF992 - Programação 2 :: Lista de Exercícios 13

Prof. Vinicius Cardoso Garcia

Exercício 1 – Mapeamento Um para Um

1. Crie a classe Usuário

import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.SequenceGenerator; import javax.persistence.Table; @Entity @Table(name = "tb_usuario")

@SequenceGenerator(name = "sq_usuario", sequenceName = "sq_usuario")

public class Usuario { @Id

@GeneratedValue(strategy = GenerationType.AUTO, generator = "sq_usuario") @Column(name = "id_usuario")

private Long id;

@Column(name = "login", length = 20, nullable = true)

private String login;

@Column(name = "senha", length = 10, nullable = true)

private String senha;

@OneToOne(mappedBy = "usuario")

private Pessoa pessoa;

public Long getId() {

return id; }

public void setId(Long id) {

this.id = id; }

public String getLogin() {

return login; }

public void setLogin(String login) {

this.login = login; }

(2)

public String getSenha() {

return senha; }

public void setSenha(String senha) {

this.senha = senha; }

public Pessoa getPessoa() {

return pessoa; }

public void setPessoa(Pessoa pessoa) {

this.pessoa = pessoa; }

}

2. Crie na classe Pessoa.

import java.util.Date; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.SequenceGenerator; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name = "tb_pessoa")

@SequenceGenerator(name = "sq_pessoa", sequenceName = "sq_pessoa")

public class Pessoa { @Id

@GeneratedValue(strategy = GenerationType.AUTO, generator = "sq_pessoa") @Column(name = "id_pessoa")

private Long id;

@Column(name = "nome", length = 30, nullable = true)

private String nome;

@Column(name = "ativo", nullable = true)

protected Boolean ativo; @Temporal(TemporalType.DATE)

@Column(name = "dt_criacao", nullable = true)

private Date nascimento;

@OneToOne(cascade = CascadeType.ALL, fetch=FetchType.LAZY)

private Usuario usuario;

public Long getId() {

return id; }

public void setId(Long id) {

(3)

public Date getNascimento() {

return nascimento; }

public void setNascimento(Date nascimento) {

this.nascimento = nascimento; }

public Boolean getAtivo() {

return ativo; }

public void setAtivo(Boolean ativo) {

this.ativo = ativo; }

public Usuario getUsuario() {

return usuario; }

public void setUsuario(Usuario usuario) {

this.usuario = usuario; }

}

3. Inclua no DAO um metodo para incluir a pessoa com seu respectivo usuario:

public void inserirUsuario(Pessoa pessoa, Usuario usuario) { Session sessao = HibernateUtil.getSession();

Transaction transaction = sessao.beginTransaction(); sessao.save(pessoa); usuario.setPessoa(pessoa); sessao.save(usuario); pessoa.setUsuario(usuario); sessao.update(usuario); transaction.commit(); sessao.close(); }

4. Construa um teste na classe AlunoDAOTest que verifique essa inclusao:

@Test

public void testInclusaoUsuario(){ Pessoa pessoa = new Pessoa(); pessoa.setNome("Joao");

pessoa.setNascimento(new Date()); Usuario usuario = new Usuario(); usuario.setLogin("joao");

usuario.setSenha("123");

pessoaDAO.inserirUsuario(pessoa, usuario); Usuario usuarioB = pessoaDAO.getUsuario(pessoa);

assertEquals(pessoa.getId(), usuarioB.getPessoa().getId());

}

(4)

5. Crie a classe Endereco

import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.SequenceGenerator; import javax.persistence.Table; @Entity @Table(name = "tb_endereco")

@SequenceGenerator(name = "sq_endereco", sequenceName = "sq_endereco")

public class Endereco { @Id

@GeneratedValue(strategy = GenerationType.AUTO, generator = "sq_endereco") @Column(name = "id_endereco")

private Long id;

@Column(name = "logradouro", length = 45)

public String logradouro; @ManyToOne

@JoinColumn(name = "fk_pessoa")

private Pessoa pessoa;

public Long getId() {

return id; }

public void setId(Long id) {

this.id = id; }

public String getLogradouro() {

return logradouro; }

public void setLogradouro(String logradouro) {

this.logradouro = logradouro; }

public Pessoa getPessoa() {

return pessoa; }

public void setPessoa(Pessoa pessoa) {

this.pessoa = pessoa; }

}

2. Inclua na classe Pessoa coleção de endereço e seu respectivos get e set. Inicialize a

coleção no método construtor da classe.

(5)

enderecos = new ArrayList<Endereco>(); }

Na classe Pessoa crie o get e set de enderecos;

public List<Endereco> getEnderecos() {

return enderecos; }

public void setEnderecos(List<Endereco> endereco) {

this.enderecos = endereco; }

3. Inclua a classe Endereco no hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration>

<session-factory> <property

name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property> <property

name="hibernate.connection.url">jdbc:hsqldb:hsql://localhost/escola</property> <property name="hibernate.connection.username">sa</property>

<property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property> <property name="show_sql">true</property>

<property name="format_sql">true</property> <property name="hbm2ddl.auto">update</property> <mapping class="Pessoa" />

<mapping class="Usuario" /> <mapping class="Endereco" /> </session-factory>

</hibernate-configuration>

(6)

Exercício 3 – Execução e Testes

1. Crie na classe de teste PessoaDaoTest um teste para verificar a inclusao de endereço.

@Test

public void testInclusaoEndereco(){ Pessoa pessoa = new Pessoa(); pessoa.setNome("Joao");

pessoa.setNascimento(new Date()); Endereco endereco = new Endereco(); endereco.setLogradouro("Rua sem nome"); pessoaDAO.inserirEndereco(pessoa, endereco);

Pessoa pessoaB = pessoaDAO.getPessoa(pessoa.getId());

assertEquals(1, pessoaB.getEnderecos().size());

assertEquals("Rua sem nome",pessoaB.getEnderecos().get(0).getLogradouro());

}

Exercício 4 – Mapeamento muitos para muitos

6. Cria a classe Produto

import java.util.ArrayList; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToMany; import javax.persistence.SequenceGenerator; import javax.persistence.Table; @Entity @Table(name = "tb_produto")

@SequenceGenerator(name = "sq_produto", sequenceName = "sq_produto")

public class Produto { @Id

@GeneratedValue(strategy = GenerationType.AUTO, generator = "sq_produto") @Column(name = "id_produto")

private Long id;

@Column(name = "nome", length = 30, nullable = true)

private String nome;

@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE })

private List<Pessoa> pessoas;

(7)

this.id = id; }

public String getNome() {

return nome; }

public void setNome(String nome) {

this.nome = nome; }

public List<Pessoa> getPessoas() {

return pessoas; }

public void setPessoas(List<Pessoa> pessoas) {

this.pessoas = pessoas; }

}

7. Adicione a classe pessoa a coleção de produtos, inicialize-a no construtor da classe:

@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE })

private List<Produto> produtos;

public Pessoa(){

enderecos = new ArrayList<Endereco>(); produtos = new ArrayList<Produto>(); }

8. Crie um metodo para inclusao de produtos na classe PessoaDAO

public void inserirProduto(Pessoa pessoa, Produto produto) { Session sessao = HibernateUtil.getSession();

Transaction transaction = sessao.beginTransaction(); pessoa.getProdutos().add(produto); produto.getPessoas().add(pessoa); sessao.saveOrUpdate(pessoa); sessao.saveOrUpdate(produto); transaction.commit(); sessao.close(); }

9. Inclua a classe no hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration>

<session-factory>

<property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property> <property name="hibernate.connection.url">jdbc:hsqldb:hsql://localhost/escola</property> <property name="hibernate.connection.username">sa</property>

<property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property> <property name="show_sql">true</property>

<property name="format_sql">true</property> <property name="hbm2ddl.auto">update</property> <mapping class="Pessoa" />

<mapping class="Usuario" /> <mapping class="Endereco" /> <mapping class="Produto" /> </session-factory>

</hibernate-configuration>

10. Crie o o teste para verificar a inclusao na classe PessoaDAOTest

(8)

public void testInclusaoProduto(){ Pessoa pessoa = new Pessoa(); pessoa.setNome("Joao");

pessoa.setNascimento(new Date()); Produto produto = new Produto(); produto.setNome("Coca-Cola");

pessoaDAO.inserirProduto(pessoa, produto);

Pessoa pessoaB = pessoaDAO.getPessoa(pessoa.getId());

assertEquals(1, pessoaB.getProdutos().size());

assertEquals("Coca-Cola", pessoaB.getProdutos().get(0).getNome());

}

11. Rode os teste e analise os resultados.

Referências

Documentos relacionados

A importância deste trabalho dá-se pelo fato das disciplinas buscarem, conjuntamente, “estimular, nos alunos, o senso de preservação da memória social coletiva,

O principal objetivo deste Projeto de Doutoramento é compreender de que modo é que as tecnologias de informação móveis, relacionadas com o desenvolvi- mento das aplicações

falar e tardios para irar-se, pois a ira do homem não produz a justiça de Deus. • Duas maneira de Deus exercer

A caracterização da arborização urbana do município de Alagoinhas envolve o alcance de objetivos específicos tais como: realizar estudo no qual serão coletados dados como estado

O aprendizado das crianças disléxicas não é impossível, mas os professores tem que procurar meios que venham a auxiliar este aprendizado, pois elas tem dificuldade em aprender no

É termo utilizado para descrever um método de ataque, onde alguém faz uso da persuasão, muitas vezes abusando da ingenuidade ou confiança do usuário, para obter informações que

CONCLUSÕES: Há correlação positiva entre o IP neonatal e concentração de leptina materna em gestantes diabéticas usuárias de insulina; há correlação positiva entre

Quando o diálogo Expert Level Parameter aparecer, selecione Variable Selection, , então a seguinte caixa de diálogo aparecerá:... Este diálogo também pode ser acessado através