176 pág.

Pré-visualização | Página 21 de 25
a persistência: package br.com.ead.helper; import javax.persistence.EntityManager; import br.com.ead.entity.Forum; import br.com.ead.entity.Usuario; public class ForumHelper { private EntityManager em; public ForumHelper(EntityManager em){ this.em = em; } public String salvar(Forum forum){ try{ em.getTransaction().begin(); em.persist(forum); Aplicações Com Hibernate, EJB e JPA 143 em.getTransaction().commit(); return “Forum salvo”; }catch(Exception e){ return e.getMessage(); } } public String adicionarUsuario(int idForum, Usuario usuario){ try { Forum f = em.find(Forum.class, idForum); usuario.setForum(f); f.getUsuarios().add(usuario); em.getTransaction().begin(); em.persist(f); em.getTransaction().commit(); return “Inclusao realizada”; } catch(Exception e){ return e.getMessage(); } } } • Para testar a aplicação, criar um fórum e três usuários, associando cada usuário ao fórum criado: package br.com.ead.programa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import br.com.ead.entity.Forum; import br.com.ead.entity.Usuario; import br.com.ead.helper.ForumHelper; public class TesteForum { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory(“Forum”); EntityManager em = emf.createEntityManager(); ForumHelper dao = new ForumHelper(em); Forum forum = new Forum(); forum.setAssunto(“JPA”); forum.setDescricao(“Java Persistence API”); Aplicações Com Hibernate, EJB e JPA 144 System.out.println(dao.salvar(forum)); Usuario usuario = new Usuario(); usuario.setNome(“Joaquim”); usuario.setEmail(“joaquim@ead.com.br”); System.out.println(dao.adicionarUsuario(forum.getId(), usuario)); } } Exercício 2 Com base no Exercício1, criar uma aplicação para a persistência de clientes e pedidos, usando anotações JPA. O modelo é dado a seguir. É necessário criar a aplicação completa! • Com base neste modelo, criar as entidades Clientes e Pedidos: Entidade Clientes: package br.com.entity; import java.io.Serializable; import java.util.HashSet; import java.util.Set; 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.OneToMany; import javax.persistence.Table; Aplicações Com Hibernate, EJB e JPA 145 @Entity @Table(name=”clientes”) public class Clientes implements Serializable{ @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = “IDCLIENTE”) private int id; @Column(name = “NOME”) private String nome; @Column(name = “EMAIL”) private String email; @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = “cliente”) private Set<Pedidos> pedidos = new HashSet<Pedidos>(); public Set<Pedidos> getPedidos() { return pedidos; } public void setPedidos(Set<Pedidos> pedidos) { this.pedidos = pedidos; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } Aplicações Com Hibernate, EJB e JPA 146 } Entidade Pedidos package br.com.ead.entity; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; package br.com.entity; import java.io.Serializable; import java.util.Date; 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.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; @Entity @Table(name=”clientes”) public class Pedidos implements Serializable{ @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = “IDUSUARIO”) private int id; @Column(name = “DATA”) private Date data; @Column(name = “DESCRICAO”) private String descricao; Aplicações Com Hibernate, EJB e JPA 147 @Column(name = “VALOR”) private double valor; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = “IDCLIENTE”) private Clientes cliente; public int getId() { return id; } public void setId(int id) { this.id = id; } public Date getData() { return data; } public void setData(Date data) { this.data = data; } public String getDescricao() { return descricao; } public void setDescricao(String descricao) { this.descricao = descricao; } public double getValor() { return valor; } public void setValor(double valor) { this.valor = valor; } public Clientes getCliente() { return cliente; } Aplicações Com Hibernate, EJB e JPA 148 public void setCliente(Clientes cliente) { this.cliente = cliente; } } • Definir, na pasta src/META-INF, o arquivo persistence.xml: <?xml version=”1.0” encoding=”UTF-8”?> <persistence version=”1.0” xmlns=”http://java.sun.com/xml/ns/persistence” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd”> <persistence-unit name=”clientePU”> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>br.com.entity.Clientes</class> <class>br.com.entity.Pedidos</class> <properties> <property name=”hibernate.hbm2ddl.auto” value=”update” /> <property name=”hibernate.format_sql” value=”true” /> <property name=”hibernate.dialect” value=”org.hibernate.dialect.MySQLDialect” /> <property name=”hibernate.connection.driver_class” value=”com.mysql.jdbc.Driver” /> <property name=”hibernate.connection.url” value=”jdbc:mysql://localhost/forum01” /> <property name=”hibernate.connection.username” value=”root” /> <property name=”hibernate.connection.password” value=”password” /> </properties> </persistence-unit> </persistence> • Escrever a classe Helper, contendo métodos auxiliares para realizar a persistência: package br.com.helper; import javax.persistence.EntityManager; import br.com.entity.Forum; import br.com.entity.Usuario; Aplicações Com Hibernate, EJB e JPA 149 public class Helper { private EntityManager em; public Helper(EntityManager em){ this.em = em; } public String salvar(Clientes cliente){ try{ em.getTransaction().begin(); em.persist(cliente); em.getTransaction().commit(); return “Cliente salvo”; }catch(Exception e){ return e.getMessage(); } } public String adicionarPedido(int idCliente, Pedidos pedido){ try { Cliente f = em.find(Cliente.class, idCliente); pedido.setCliente(f); f.getPedidos().add(pedido); em.getTransaction().begin(); em.persist(f); em.getTransaction().commit(); return “Inclusao realizada”; } catch(Exception e){