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);