FIltro datatable AJUDA POR FAVOR DESESPERO

Alo galera, tenho um programa de escola feito com spring security, JSF, primefaces e JAVA e base de dados mysql.

Tenho uma datatable que mostra todos dados de todos estabelecimentos que tenho na base de dados.

Gostaria de carregar a pagina pela primeira vez e a tabela aparecer por padrao filtrada pelo nome de uma das colunas nao importa qual seja so preciso da logica.

INvestiguei sobre o filterby mas o filter by mostra-me um campo para eu filtrar depois da tabela aparecer. Eu quero que a tabela apareca ja filtrada.

POR FAVOR AJUDA AEEEEEEEEEEEEEE

OBRIGADO

CLASSE DAO
package mz.co.mpteventos.springsecurity.dao;

import java.util.List;

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

import mz.co.mpteventos.springsecurity.model.Conta;
import mz.co.mpteventos.springsecurity.model.Estabelecimento;

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 removeNaLista(List<T> t) {
	EntityManager em = new JPAUtil().getEntityManager();
	em.getTransaction().begin();

	for (int i = 0; i < t.size(); i++) {
		em.remove(em.merge(t.get(i)));
	}

	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 T buscaPorNome(String t) {
	EntityManager em = new JPAUtil().getEntityManager();
	T instancia = em.find(classe, t);
	em.close();
	return instancia;
}


public int contaTodos() {
	EntityManager em = new JPAUtil().getEntityManager();
	long result = (Long) em.createQuery("select count(n) from evento 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;
}

}

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

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

<ui:define name="conteudo">
	<h:form id="formulario">
		<p:growl id="msgs" showDetail="true" autoUpdate="true" />
		
		<p:fieldset legend="Visualizar Estabelecimentos" >
			<p:dataTable id="basicDT" var="estabelecimento" value="#{estabelecimentoBean.listaEstabelecimentos}" paginator="true" rows="10" >
    			
				<p:column headerText="Nome" sortBy="#{estabelecimento.nomeEstabelecimento}" filterBy="#{estabelecimento.nomeEstabelecimento}">
					<h:outputText value="#{estabelecimento.nomeEstabelecimento}" />
				</p:column>
				
				<p:column headerText="Avenida" sortBy="#{estabelecimento.local.avenida}" filterBy="#{estabelecimento.local.avenida}">
					<h:outputText value="#{estabelecimento.local.avenida}" />
				</p:column>
				
				<p:column headerText="Telefone">
					<h:outputText value="#{estabelecimento.contacto.telefone}" />
				</p:column>
				
				<p:column headerText="Celular">
					<h:outputText value="#{estabelecimento.contacto.celular_principal}" />
				</p:column>
				
				<p:column headerText="Email">
					<h:outputText value="#{estabelecimento.contacto.email}" />
				</p:column>
				
				<p:column headerText="Usuario" filterBy="#{estabelecimento.conta.nome}" filterMatchMode="startsWith" filterValue="#{userDetailServiceImpl.usuarioLogado}">
					<h:outputText value="#{estabelecimento.conta.nome}" />
					<f:event type="preRenderComponent" listener="#{bean.execute()}"/>
				</p:column>
				
				<p:column style="width:32px">
					<p:commandButton update=":formulario:estabelecimentoDetail :formulario:estabelecimentoDetail1 :formulario:msgs"
						oncomplete="PF('estabelecimentoDialog').show()" icon="ui-icon-search"
						title="View">
						<f:setPropertyActionListener value="#{estabelecimento}"
							target="#{estabelecimentoBean.estabelecimentoSelecionado}" />
					</p:commandButton>
				</p:column>
			</p:dataTable>

        
			<p:dialog header="Estabelecimento Info" widgetVar="estabelecimentoDialog" modal="true"
				showEffect="fade" hideEffect="fade" resizable="true">
				<p:outputPanel id="estabelecimentoDetail">
				
					<p:panelGrid>
					<h:graphicImage library="img" name="fotoestabelecimentos.png" height="200" style="position: relative; left: 130px"/>
					</p:panelGrid>
				
					<p:panelGrid columns="4"
						rendered="#{not empty estabelecimentoBean.estabelecimentoSelecionado}"
						columnClasses="label,value" >

						<h:outputText value="Nome:"/>
						<h:outputText value="#{estabelecimentoBean.estabelecimentoSelecionado.nomeEstabelecimento}" />
						<h:inputHidden  width="1" />
						<h:inputHidden  width="1" />
						
						<h:outputText value="Avenida" />
						<h:outputText value="#{estabelecimentoBean.estabelecimentoSelecionado.local.avenida}" />
						<h:outputText value="Numero" />
						<h:outputText value="#{estabelecimentoBean.estabelecimentoSelecionado.local.numero}" />
						
						<h:outputText value="Telefone" />
						<h:outputText value="#{estabelecimentoBean.estabelecimentoSelecionado.contacto.telefone}" />
						<h:inputHidden  width="1" />
						<h:inputHidden  width="1" />
						
						<h:outputText value="Celular" />
						<h:outputText value="#{estabelecimentoBean.estabelecimentoSelecionado.contacto.celular_principal}" />
						<h:inputHidden  width="1" />
						<h:inputHidden  width="1" />
					
						<h:outputText value="Email" />
						<h:outputText value="#{estabelecimentoBean.estabelecimentoSelecionado.contacto.email}" />
						<h:inputHidden  width="1" />
						<h:inputHidden  width="1" />
						
					</p:panelGrid>
					
					<p:panelGrid id="estabelecimentoDetail1" columns="1" 
						rendered="#{not empty estabelecimentoBean.estabelecimentoSelecionado}"
						columnClasses="label,value">
						<p:inputTextarea value="#{estabelecimentoBean.estabelecimentoSelecionado.descricaoEstabelecimento}" cols="52" rows="10" readonly="true"/>
					</p:panelGrid>
				</p:outputPanel>
			</p:dialog>

		</p:fieldset>

	</h:form>
</ui:define>

</ui:composition>

ESTABELECIMENTO BEAN`
package mz.co.mpteventos.springsecurity.bean;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import mz.co.mpteventos.springsecurity.dao.DAO;
import mz.co.mpteventos.springsecurity.model.Contacto;
import mz.co.mpteventos.springsecurity.model.Estabelecimento;
import mz.co.mpteventos.springsecurity.model.Evento;
import mz.co.mpteventos.springsecurity.model.Local;

@ManagedBean
@ViewScoped
public class EstabelecimentoBean {

private Estabelecimento estabelecimento = new Estabelecimento();
private Estabelecimento estabelecimentoSelecionado;

private List<Estabelecimento> listaEstabelecimentos;
private List<Estabelecimento> estabelecimentoSelecionados;
private List<Local> listaLocais;
private List<Contacto> listaContactos;
private List<Evento> listaeventos;


private List<Estabelecimento> listaEstabelecimentosFiltrados;

public EstabelecimentoBean() {
	listaEstabelecimentos = new DAO<Estabelecimento>(Estabelecimento.class).listaTodos();
	estabelecimentoSelecionados = new DAO<Estabelecimento>(Estabelecimento.class).listaTodos();
	listaLocais = new DAO<Local>(Local.class).listaTodos();
	listaContactos = new DAO<Contacto>(Contacto.class).listaTodos();
	listaeventos = new DAO<Evento>(Evento.class).listaTodos();
}



public List<Estabelecimento> getListaEstabelecimentos() {
	return listaEstabelecimentos;
}

public void setListaEstabelecimentos(List<Estabelecimento> listaEstabelecimentos) {
	this.listaEstabelecimentos = listaEstabelecimentos;
}

public List<Estabelecimento> getEstabelecimentoSelecionados() {
	return estabelecimentoSelecionados;
}

public void setEstabelecimentoSelecionados(List<Estabelecimento> estabelecimentoSelecionados) {
	this.estabelecimentoSelecionados = estabelecimentoSelecionados;
}

public Estabelecimento getEstabelecimentoSelecionado() {
	return estabelecimentoSelecionado;
}

public void setEstabelecimentoSelecionado(Estabelecimento estabelecimentoSelecionado) {
	this.estabelecimentoSelecionado = estabelecimentoSelecionado;
}

public Estabelecimento getEstabelecimento() {
	return estabelecimento;
}

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

public List<Local> getListaLocais() {
	return listaLocais;
}

public void setListaLocais(List<Local> listaLocais) {
	this.listaLocais = listaLocais;
}

public List<Contacto> getListaContactos() {
	return listaContactos;
}

public void setListaContactos(List<Contacto> listaContactos) {
	this.listaContactos = listaContactos;
}

public List<Evento> getListaeventos() {
	return listaeventos;
}

public void setListaeventos(List<Evento> listaeventos) {
	this.listaeventos = listaeventos;
}

public List<Estabelecimento> getListaEstabelecimentosFiltrados() {
	return listaEstabelecimentosFiltrados;
}

public void setListaEstabelecimentosFiltrados(List<Estabelecimento> listaEstabelecimentosFiltrados) {
	this.listaEstabelecimentosFiltrados = listaEstabelecimentosFiltrados;
}

}

Classe Estabelecimento
package mz.co.mpteventos.springsecurity.model;

import java.util.Calendar;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

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

private String nomeEstabelecimento;
private String descricaoEstabelecimento;

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

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

@OneToOne
private Contacto contacto;

@OneToOne
private Local local;

@ManyToOne
private Conta conta;

//getters & setters

public Contacto getContacto() {
	return contacto;
}
public void setContacto(Contacto contacto) {
	this.contacto = contacto;
}
public Integer getId() {
	return id;
}
public String getNomeEstabelecimento() {
	return nomeEstabelecimento;
}
public void setNomeEstabelecimento(String nomeEstabelecimento) {
	this.nomeEstabelecimento = nomeEstabelecimento;
}
public Local getLocal() {
	return local;
}
public void setLocal(Local local) {
	this.local = local;
}
public void setId(Integer id) {
	this.id = id;
}
public String getDescricaoEstabelecimento() {
	return descricaoEstabelecimento;
}
public void setDescricaoEstabelecimento(String descricaoEstabelecimento) {
	this.descricaoEstabelecimento = descricaoEstabelecimento;
}
public Calendar getDatadeOperacao() {
	return datadeOperacao;
}
public void setDatadeOperacao(Calendar datadeOperacao) {
	this.datadeOperacao = datadeOperacao;
}
public Calendar getHoraDeOperacao() {
	return horaDeOperacao;
}
public void setHoraDeOperacao(Calendar horaDeOperacao) {
	this.horaDeOperacao = horaDeOperacao;
}
public Conta getConta() {
	return conta;
}
public void setConta(Conta conta) {
	this.conta = conta;
}

}