Ordenar p:dataTable com PrimeFaces

Olá pessoal, estou com o seguinte problema: Tenho uma p:dataTable com paginação por demanda. o problema é que meus sortBy e filterBy nao funcionam. Acho que é por causa da paginação. Alguém tem alguma ideia de como resolver isso?

XHTML

<p:dataTable id="dtCarreta" value="#{carretaMBean.carretas}" lazy="true" var="item" paginator="true" rows="5" emptyMessage="#{msgs.dtVazia}" rowsPerPageTemplate="5,10,15" selection="#{carretaMBean.selectedCarretas}" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowStyleClass="#{empty rowIx or rowIx mod 2 ne 0 ? 'even-row' : 'odd-row'}" rowIndexVar="rowIx"> <p:column selectionMode="multiple" /> <p:column id="clnCodCarreta" sortBy="#{item.codigocarreta}" filterBy="#{item.codigocarreta}" style="width: 50px" > <f:facet name="header"> <h:outputText id="optCodigoCarreta" value="#{msgs.optTableCodigoCarreta}" /> </f:facet> <h:outputText value="#{item.codigocarreta}"/> </p:column> <p:column id="clnDescricaoCarreta" sortBy="#{item.descricao}" filterBy="#{item.descricao}"> <f:facet name="header"> <h:outputText id="optDescricaoCarreta" value="#{msgs.optTableDescricaoCarreta}" /> </f:facet> <h:outputText value="#{item.descricao}"/> </p:column> <p:column id="clnPlaca" sortBy="#{item.placa}" filterBy="#{item.placa}"> <f:facet name="header"> <h:outputText value="#{msgs.optTablePlacaCarreta}" /> </f:facet> <h:outputText value="#{item.placa}"/> </p:column> </p:dataTable>

BEAN

[code]public LazyDataModel getCarretas() {
if (cachedCarreta == null) {
cachedCarreta = new LazyDataModel() {

            @Override
            public List<Carreta> load(int first, int pageSize,
                    String sortBy, boolean bln, Map<String, String> map) {
                List<Carreta> pesquisaCarreta = carretaDAO.getListaPaginado(first, pageSize, sortBy);
                return pesquisaCarreta;
            }
        };
        int totalRowCount = carretaDAO.count();
        cachedCarreta.setPageSize(3);
        cachedCarreta.setRowIndex(1);
        cachedCarreta.setRowCount(totalRowCount);
    }
    return cachedCarreta;
}[/code]

DAO

public int count() { Long resultado = new Long(0L); Query query = getSession().createQuery("select count(e) from Carreta e" ); resultado = (Long) query.uniqueResult(); return resultado.intValue(); }

[code]public List getListaPaginado(int inicio, int quantidade, String sortBy) {
Session ses = getSession();
Query query = ses.createQuery(“SELECT e FROM Carreta e”).setFirstResult(inicio).setMaxResults(quantidade);

    List<Carreta> lista = (List<Carreta>) query.list();
    ses.close();
    return lista;
}[/code]

Por favor, se alguém souber me ajude…

Testa no método getListaPaginado se a list é nula e somente alimenta novamente se ela for nula.