[RESOLVIDO]DUVIDA Primefaces + Hibernate + remover multiplas linhas da Tabela

Alo, tudo bem? Preciso de ajuda por favor, estou tentando selecionar linhas multiplas em uma tabela e depois de selecionar quero clicar no botao para remover as linhas selecionadas. Quero que essas linhas sejam removidas na base de dados tambem.

Base de dados usada Mysql (nome: mozeventosdb)
Primefaces 6.0
JSF 2.0
Java 8

Ai vai o que fi ate agora:
removereventos.xhtml

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

<ui:composition template="_template.xhtml">
<ui:define name=“titulo”>
Remover Evento
</ui:define>

<ui:define name="conteudo">
<h:form>
	
	<p:messages id="messages" autoUpdate="true"/>
	<p:fieldset legend="Dados do Evento" >
		<h:panelGrid columns="4">

			<h:outputLabel value="Nome do evento:" for="nome" />
			<p:inputText id="nome" value="#{eventoBean.evento.nomeEvento}"
			 validatorMessage="O nome nao pode ser superior a 40 caracteres"  >
				<f:validateLength maximum="40"/> 
				<f:ajax event="blur"/>
			</p:inputText>
			<h:inputHidden width="1"/>
			<h:inputHidden width="1"/>

			<h:outputLabel value="Data do evento: " for="dataEventoInicio" />
			<p:calendar id="dataEventoInicio"  value="#{eventoBean.evento.dataEventoInicio.time}" 
			pattern="dd/MM/yyyy" timeZone="Africa/Harare" />
			
			<h:outputLabel value="ate" for="dataEventoFim" />
			<p:calendar id="dataEventoFim"  value="#{eventoBean.evento.dataEventoFim.time}" 
			pattern="dd/MM/yyyy" timeZone="Africa/Harare" />
		</h:panelGrid>
		
		<br />

  <p:dataTable id="tabelaEventoss" var="evento" value="#{eventoBean.listaEventos}" selectionMode="multiple" 
  selection="#{eventoBean.eventosSelecionados}" rowKey="#{evento.id}" paginator="true" rows='10'>
    <f:facet name="header">
        Tabela de Eventos
    </f:facet>
    <p:column headerText="Nome">
        <h:outputText value="#{evento.nomeEvento}" />
    </p:column>
    <p:column headerText="Descricao">
        <h:outputText value="#{evento.descricaoEvento}" />
    </p:column>
    <p:column headerText="Data Inicio">
        <h:outputText value="#{evento.dataEventoInicio.time}">
        	<f:convertDateTime pattern="dd/MM/yyy" timeZone="Africa/Harare"/>
        </h:outputText>
    </p:column>
    <p:column headerText="Data Fim">
        <h:outputText value="#{evento.dataEventoFim.time}">
        	<f:convertDateTime pattern="dd/MM/yyy" timeZone="Africa/Harare"/>
        </h:outputText>
    </p:column>
    <f:facet name="footer">
		<p:commandButton process="tabelaEventoss" value="Pesquisar" type="reset" icon="ui-icon-search"/>

        <p:commandButton process="tabelaEventoss" value="Remover" action="#{eventoBean.remover(evento)}" 
        type="reset" icon="ui-icon-trash"/>
    </f:facet>
</p:dataTable>
</p:fieldset>
		
</h:form>
</ui:define>

</ui:composition>

Evento.class
package mz.co.evento.modelo;

import java.util.Calendar;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class Evento {
@Id
@GeneratedValue
private Integer id;

private String nomeEvento;
private String descricaoEvento;
private Integer limiteDePessoas;
private boolean estadoDoEvento;

@Temporal(TemporalType.DATE)
private Calendar dataEventoInicio = Calendar.getInstance();

@Temporal(TemporalType.DATE)
private Calendar dataEventoFim = Calendar.getInstance();

@ManyToOne
private Categoria categoria;

@ManyToOne
private Estabelecimento estabelecimento;



// Getters e Setters

public String getNomeEvento() {
	return nomeEvento;
}


public Estabelecimento getEstabelecimento() {
	return estabelecimento;
}


public void setEstabelecimento(Estabelecimento estabelecimento) {
	this.estabelecimento = estabelecimento;
}


public void setNomeEvento(String nomeEvento) {
	this.nomeEvento = nomeEvento;
}

public String getDescricaoEvento() {
	return descricaoEvento;
}

public void setDescricaoEvento(String descricaoEvento) {
	this.descricaoEvento = descricaoEvento;
}

public Categoria getCategoria() {
	return categoria;
}

public void setCategoria(Categoria categoria) {
	this.categoria = categoria;
}

public Integer getLimiteDePessoas() {
	return limiteDePessoas;
}

public void setLimiteDePessoas(Integer limiteDePessoas) {
	this.limiteDePessoas = limiteDePessoas;
}

public Calendar getDataEventoInicio() {
	return dataEventoInicio;
}

public void setDataEventoInicio(Calendar dataEventoInicio) {
	this.dataEventoInicio = dataEventoInicio;
}

public Integer getId() {
	return id;
}

public Calendar getDataEventoFim() {
	return dataEventoFim;
}

public void setDataEventoFim(Calendar dataEventoFim) {
	this.dataEventoFim = dataEventoFim;
}

public boolean isEstadoDoEvento() {
	return estadoDoEvento;
}

public void setEstadoDoEvento(boolean estadoDoEvento) {
	this.estadoDoEvento = estadoDoEvento;
}

}

EventoBean.class

package mz.co.evento.bean;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import mz.co.evento.dao.DAO;
import mz.co.evento.modelo.Categoria;
import mz.co.evento.modelo.Estabelecimento;
import mz.co.evento.modelo.Evento;

@ManagedBean
@ViewScoped
public class EventoBean {

private Evento evento = new Evento();
private List<Evento> eventosSelecionados;
private Integer estabelecimentoId;
private Integer categoriaId;

public void gravarCategoriao(){
	Categoria categoria = new DAO<Categoria>(Categoria.class).buscaPorId(this.categoriaId);
	System.out.println("Nome da categoria: " + categoria.getNome());
	this.evento.setCategoria(categoria);
}

public void gravarEstabelecimento(){
	Estabelecimento estabelecimento = new DAO<Estabelecimento>(Estabelecimento.class).buscaPorId(this.estabelecimentoId);
	System.out.println(estabelecimento.getNomeEstabelecimento() + " Vamos ver se o estabelecimento esta correcta");
	this.evento.setEstabelecimento(estabelecimento);
}

public List<Estabelecimento> getListaEstabelecimentos(){
	return new DAO<Estabelecimento>(Estabelecimento.class).listaTodos();
}

public List<Evento> getEventosSelecionados() {
	return eventosSelecionados;
}

public void setEventosSelecionados(List<Evento> eventosSelecionados) {
	this.eventosSelecionados = eventosSelecionados;
}

public List<Categoria> getListaCategorias(){
	return new DAO<Categoria>(Categoria.class).listaTodos();
}

public List<Evento> getListaEventos(){
	return new DAO<Evento>(Evento.class).listaTodos();
}

public Evento getEvento() {
	return evento;
}

public void setEvento(Evento evento) {
	this.evento = evento;
}

public Integer getEventoId() {
	return estabelecimentoId;
}

public void setEventoId(Integer eventoId) {
	this.estabelecimentoId = eventoId;
}

public Integer getEstabelecimentoId() {
	return estabelecimentoId;
}

public void setEstabelecimentoId(Integer estabelecimentoId) {
	this.estabelecimentoId = estabelecimentoId;
}

public Integer getCategoriaId() {
	return categoriaId;
}

public void setCategoriaId(Integer categoriaId) {
	this.categoriaId = categoriaId;
}

public void gravar() {
	System.out.println("Gravando evento " + this.evento.getNomeEvento());
	gravarCategoriao();
	gravarEstabelecimento();
	new DAO<Evento>(Evento.class).adiciona(this.evento);
}

public void remover(Evento evento){
	new DAO<Evento>(Evento.class).remove(evento);
}	

}

DAO.class

package mz.co.evento.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaQuery;

public class DAO {

private final Class<T> classe;

public DAO(Class<T> classe) {
	this.classe = classe;
}

public void adiciona(T t) {

	// consegue a entity manager
	EntityManager em = new JPAUtil().getEntityManager();

	// abre transacao
	em.getTransaction().begin();

	// persiste o objeto
	em.persist(t);

	// commita a transacao
	em.getTransaction().commit();

	// fecha a entity manager
	em.close();
}

public void remove(T t) {
	EntityManager em = new JPAUtil().getEntityManager();
	em.getTransaction().begin();

	em.remove(em.merge(t));

	em.getTransaction().commit();
	em.close();
}

public void atualiza(T t) {
	EntityManager em = new JPAUtil().getEntityManager();
	em.getTransaction().begin();

	em.merge(t);

	em.getTransaction().commit();
	em.close();
}

public List<T> listaTodos() {
	EntityManager em = new JPAUtil().getEntityManager();
	CriteriaQuery<T> query = em.getCriteriaBuilder().createQuery(classe);
	query.select(query.from(classe));

	List<T> lista = em.createQuery(query).getResultList();

	em.close();
	return lista;
}

public T buscaPorId(Integer id) {
	EntityManager em = new JPAUtil().getEntityManager();
	T instancia = em.find(classe, id);
	em.close();
	return instancia;
}

public int contaTodos() {
	EntityManager em = new JPAUtil().getEntityManager();
	long result = (Long) em.createQuery("select count(n) from livro n")
			.getSingleResult();
	em.close();

	return (int) result;
}

public List<T> listaTodosPaginada(int firstResult, int maxResults) {
	EntityManager em = new JPAUtil().getEntityManager();
	CriteriaQuery<T> query = em.getCriteriaBuilder().createQuery(classe);
	query.select(query.from(classe));

	List<T> lista = em.createQuery(query).setFirstResult(firstResult)
			.setMaxResults(maxResults).getResultList();

	em.close();
	return lista;
}

}

Obrigado desde ja. Ate agora tudo arranca normalmente so nao consigo remover

Alo galera, ja consegui resolver o problema estava com a seguinte linha:

    <p:commandButton process="tabelaEventoss" value="Remover" action="#{eventoBean.remover(evento)}" 
    type="reset" icon="ui-icon-trash"/>

Mudei para:

<p:commandButton value="Remover" process ="tabelaeventoss" actionListener="#{eventoBean.remover}" update="tabelaeventos" icon="ui-icon-trash"/>

E no metodo remover antes estava assim:

    public void remover(Evento evento){
new DAO<Evento>(Evento.class).remove(evento);

}

E mudei para:

public void remover(){
	System.out.println("Tentando remover");
	new DAO<Evento>(Evento.class).remove(this.eventoSelecionado);
}

Obrigado :smile: