Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Lista ordenada

Boa noite, queria saber se é possível no método dao listar todos trazer ele ordenado.

 public List<Quarto> listaTodos() {
        EntityManager em = new JpaUtil().getEntityManager();
        CriteriaQuery<Quarto> query = em.getCriteriaBuilder().createQuery(Quarto.class);
        query.select(query.from(Quarto.class));
        List<Quarto> lista = em.createQuery(query).getResultList();
        em.close();
        return lista;
    }
//um método estava vendo JPQL
    public List<Quarto> listaQuartosDisponiveis(){
        TypedQuery<Quarto> query = em1.createQuery("select * from quarto order by quarto.numero asc ",Quarto.class);
        return query.getResultList();
    }
8 respostas

Oi Yuri, tenta usar o addOrder :

public List<Quarto> listaTodos() {
        EntityManager em = new JpaUtil().getEntityManager();
        CriteriaQuery<Quarto> query = em.getCriteriaBuilder().createQuery(Quarto.class).addOrder(Order.asc("numero"));
        query.select(query.from(Quarto.class));
        List<Quarto> lista = em.createQuery(query).getResultList();
        em.close();
        return lista;

Não deu ele não encontra o addOrder.

Versão do Hibernate 5.1.0

Estou retornando essa consulta num DataGrid

p:dataGrid value="#{quartoBean.listaQuarto}" var="quarto" columns="5" layout="grid" rows="20" id="gridquarto" >
                    <f:facet name="header">
                        Status dos Quartos
                    </f:facet>

                    <p:panel header="#{quarto.numero}" style="text-align:center"S>
                        <h:panelGrid columns="1" style="width:100%">    
                            <h:outputText value="#{quarto.tipo}" />
                             <h:outputText value="#{quarto.descricao}" />
                             <h:outputText style="font-size:14px; font-weight: bold;" value="#{quarto.situacaoq.nome}" />
                        </h:panelGrid>
                    </p:panel>
                </p:dataGrid>

O addOrder vem do pacote org.hibernate.criterion.Order do hibernate. Dá uma olhada se ele está importado.

A quartoDao

package br.edu.ifms.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaQuery;
import org.hibernate.criterion.Order;
import br.edu.ifms.modelo.Quarto;

public class QuartoDao {

    public void cadastrar(Quarto quart){
        EntityManager em = new JpaUtil().getEntityManager();
        em.getTransaction().begin();
        em.persist(quart);
        em.getTransaction().commit();
        em.close();
    }
    public void atualizar(Quarto quarto){
        EntityManager em = new JpaUtil().getEntityManager();
        em.getTransaction().begin();
        em.merge(quarto);
        em.getTransaction().commit();
        em.close();
    }
    public void excluir(Quarto quarto){
        EntityManager em = new JpaUtil().getEntityManager();
        em.getTransaction().begin();
        em.remove(em.merge(quarto));
        em.getTransaction().commit();
        em.close();
    }
    public Quarto buscaPorId(Integer id) {
        EntityManager em = new JpaUtil().getEntityManager();
        Quarto instquarto = em.find(Quarto.class, id);
        em.close();
        return instquarto;
    }

    public List<Quarto> listaTodos() {
        EntityManager em = new JpaUtil().getEntityManager();
        CriteriaQuery<Quarto> query = em.getCriteriaBuilder().createQuery(Quarto.class).orderBy(Order.asc("numero"));
        query.select(query.from(Quarto.class));
        List<Quarto> lista = em.createQuery(query).getResultList();
        em.close();
        return lista;
    }
}

Dessa maneira acima não funcionou.

solução!

Ok, veja assim:

public List<Quarto> listaTodos() {
            EntityManager em = new JpaUtil().getEntityManager();
            CriteriaBuilder builder = em.getCriteriaBuilder();
            CriteriaQuery<Quarto> query = builder.createQuery(Quarto.class);
            Root<Quarto> from = query.from(Quarto.class);
            query.select(from).orderBy(builder.asc(from.get("numero")));
            List<Quarto> lista = em.createQuery(query).getResultList();
            em.close();
            return lista;        
}

Seus imports devem ficar algo assim:

import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import br.edu.ifms.modelo.Quarto;

Valeu mano <3