O Dia em que Eu Mordi Jesus Cristo

Propaganda
Evento.java
package dominio;
import java.util.Date;
import java.util.Set;
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.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Evento {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String nome;
private String descricao;
@OneToMany(mappedBy = "evento", fetch = FetchType.LAZY)
private Set<Palestra> palestras;
@Temporal(TemporalType.DATE)
private Date dataIncio;
@Temporal(TemporalType.DATE)
private Date dataTermino;
@Temporal(TemporalType.DATE)
private Date dataIncioInscricoes;
@Temporal(TemporalType.DATE)
private Date dataTerminoInscricoes;
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 getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Set<Palestra> getPalestras() {
return palestras;
}
public void setPalestras(Set<Palestra> palestras) {
this.palestras = palestras;
}
public Date getDataIncio() {
return dataIncio;
}
public void setDataIncio(Date dataIncio) {
this.dataIncio = dataIncio;
}
public Date getDataTermino() {
return dataTermino;
}
public void setDataTermino(Date dataTermino) {
this.dataTermino = dataTermino;
}
public Date getDataIncioInscricoes() {
return dataIncioInscricoes;
}
public void setDataIncioInscricoes(Date dataIncioInscricoes) {
this.dataIncioInscricoes = dataIncioInscricoes;
}
public Date getDataTerminoInscricoes() {
return dataTerminoInscricoes;
}
public void setDataTerminoInscricoes(Date dataTerminoInscricoes) {
this.dataTerminoInscricoes = dataTerminoInscricoes;
}
}
Palestra.java
package dominio;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
@Entity
public class Palestra {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String nome;
private String descricao;
private String areaConhecimento;
private int numeroVagas;
@OneToMany(mappedBy = "palestra", fetch = FetchType.LAZY)
private Set<Inscricao> inscricoes;
@ManyToOne(fetch = FetchType.EAGER)
private Evento evento;
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 getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public String getAreaConhecimento() {
return areaConhecimento;
}
public void setAreaConhecimento(String areaConhecimento) {
this.areaConhecimento = areaConhecimento;
}
public int getNumeroVagas() {
return numeroVagas;
}
public void setNumeroVagas(int numeroVagas) {
this.numeroVagas = numeroVagas;
}
public Set<Inscricao> getInscricoes() {
return inscricoes;
}
public void setInscricoes(Set<Inscricao> inscricoes) {
this.inscricoes = inscricoes;
}
public Evento getEvento() {
return evento;
}
public void setEvento(Evento evento) {
this.evento = evento;
}
}
Participante
package dominio;
import java.util.Date;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Participante {
@Id
private String cpf;
private String nome;
private String email;
private String curso;
private String instituicao;
private String telefone;
private String endereco;
private String numero;
private String bairro;
private String municipio;
private String uf;
private String cep;
@Temporal(TemporalType.TIMESTAMP)
private Date dataCadastro;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "participante")
private Set<Inscricao> inscricoes;
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
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;
}
public String getCurso() {
return curso;
}
public void setCurso(String curso) {
this.curso = curso;
}
public String getInstituicao() {
return instituicao;
}
public void setInstituicao(String instituicao) {
this.instituicao = instituicao;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getNumero() {
return numero;
}
public void setNumero(String numero) {
this.numero = numero;
}
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
public String getMunicipio() {
return municipio;
}
public void setMunicipio(String municipio) {
this.municipio = municipio;
}
public String getUf() {
return uf;
}
public void setUf(String uf) {
this.uf = uf;
}
public String getCep() {
return cep;
}
public void setCep(String cep) {
this.cep = cep;
}
public Date getDataCadastro() {
return dataCadastro;
}
public void setDataCadastro(Date dataCadastro) {
this.dataCadastro = dataCadastro;
}
public Set<Inscricao> getInscricoes() {
return inscricoes;
}
public void setInscricoes(Set<Inscricao> inscricoes) {
this.inscricoes = inscricoes;
}
}
Inscricao.java
package dominio;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Inscricao {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int numeroInscricao;
@ManyToOne(fetch = FetchType.EAGER)
private Participante participante;
@ManyToOne(fetch = FetchType.EAGER)
private Palestra palestra;
@Temporal(TemporalType.TIMESTAMP)
private Date dataInscricao;
public int getNumeroInscricao() {
return numeroInscricao;
}
public void setNumeroInscricao(int numeroInscricao) {
this.numeroInscricao = numeroInscricao;
}
public Participante getParticipante() {
return participante;
}
public void setParticipante(Participante participante) {
this.participante = participante;
}
public Date getDataInscricao() {
return dataInscricao;
}
public void setDataInscricao(Date dataInscricao) {
this.dataInscricao = dataInscricao;
}
public Palestra getPalestra() {
return palestra;
}
public void setPalestra(Palestra palestra) {
this.palestra = palestra;
}
}
Além das entidades acima exibidas, precisamos definir o arquivo de configuração “persistence.xml”.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
<persistence-unit name="estacio">
<class>dominio.Evento</class>
<class>dominio.Palestra</class>
<class>dominio.Inscricao</class>
<class>dominio.Participante</class>
<properties>
<property name="javax.persistence.jdbc.url"
value="jdbc:derby://localhost:1527/estacio" />
<property name="javax.persistence.jdbc.driver"
value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="javax.persistence.jdbc.password" value="estacio" />
<property name="javax.persistence.jdbc.user" value="estacio" />
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
</properties>
</persistence-unit>
</persistence>
Na próxima classe utilizaremos o padrão de projeto Singleton como forma de obter um meio único e
centralizado de obtermos um objeto do Tipo EntityManager. Chamaremos essa classe de JPAUtil e
terá um único método getEntityManager responsável por retornar a instância do EntityManager
necessário para realizarmos nossas operações sobre o banco de dados.
JPAUtil.java
package dao;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class JPAUtil {
private static EntityManagerFactory emf = null;
private static EntityManager em = null;
public static EntityManagerFactory getEntityManagerFactory() {
if (emf == null)
emf = Persistence.createEntityManagerFactory("estacio");
return emf;
}
public static EntityManager getEntityManager() {
if (em != null && em.isOpen())
return em;
else {
em = getEntityManagerFactory().createEntityManager();
return em;
}
}
}
Além do Singleton apresentado acima também criaremos uma DAO para cada uma de nossas
entidades. Contudo nas classes apresentadas abaixo, incluiremos somente os métodos necessários
para a exceção do nosso módulo exemplo, que será a inscrição de participantes nos eventos
disponíveis. Os métodos estarão comentados para que tenhamos um melhor entendimento de suas
funcionalidades.
DAOEvento.java
package dao;
import java.util.Date;
import java.util.List;
import java.util.Set;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import dominio.Evento;
import dominio.Palestra;
public class DAOEvento {
private static EntityManager entityManager;
static{
entityManager = JPAUtil.getEntityManager();
}
//Recupera todos os eventos em que data atual seja menos que a dataTerminoInscricoes
public static List<Evento> getEventosValidos() {
Query query = entityManager.createQuery("Select e from Evento e where
e.dataTerminoInscricoes > :dataAtual");
query.setParameter("dataAtual", new Date());
return query.getResultList();
}
//Localiza um evento com base em seu id
public static Evento localizar(int id){
return entityManager.find(Evento.class, id);
}
public static Set<Palestra> listaPalestrasEvento(int idEvento){
return entityManager.find(Evento.class, idEvento).getPalestras();
}
}
DAOInscricao.java
package dao;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import dominio.Inscricao;
public class DAOInscricao {
private static EntityManager entityManager;
static{
entityManager = JPAUtil.getEntityManager();
}
public static boolean verificaSeJaInscrito(Inscricao inscricao) {
// Criamos uma consulta EJBQL que nos retorna um objeto do tipo Inscricao
Query query = entityManager
.createQuery("select i from Inscricao i where i.participante.cpf =
:cpfParticipante and i.palestra.id = :idPalestra");
// Setamos os parâmetros CPF e palestra para verificar se o participante
// já está inscrito para a palestra selecionada
query.setParameter("cpfParticipante", inscricao.getParticipante()
.getCpf());
query.setParameter("idPalestra", inscricao.getPalestra().getId());
// Caso não seja encontrado um resultado será lançada uma
// javax.persistence.NoResultException
return (query.getResultList().isEmpty()) ? false : true;
}
public static void salvaIncricao(Inscricao inscricao) {
// Iniciamos uma transação
entityManager.getTransaction().begin();
// Verificamos se o participante já está cadastrado no banco de dados
// Caso não exista, será persistido
DAOParticipante daop = new DAOParticipante();
if (daop.localizaParticipante(inscricao.getParticipante().getCpf()) == null) {
entityManager.persist(inscricao.getParticipante());
// Caso contrário, seus dados serão atualizados
} else {
entityManager.merge(inscricao.getParticipante());
}
// Persistimos a inscrição
entityManager.persist(inscricao);
// "Commitamos" a transação
entityManager.getTransaction().commit();
}
}
DAOParticipante.java
package dao;
import javax.persistence.EntityManager;
import dominio.Participante;
public class DAOParticipante {
private EntityManager entityManager;
public DAOParticipante(){
entityManager = JPAUtil.getEntityManager();
}
public Participante localizaParticipante(String cpf) {
// Localiza participante
return entityManager.find(Participante.class, cpf);
}
}
DAOPalestra.java
package dao;
import javax.persistence.EntityManager;
import dominio.Palestra;
public class DAOPalestra {
private static EntityManager entityManager;
static{
entityManager = JPAUtil.getEntityManager();
}
public static Palestra localizarPalestra(int idPalestra) {
return entityManager.find(Palestra.class, idPalestra);
}
}
Download