[RESOLVIDO] Dúvida simples de Criteria API do Hibernate

2 respostas
tiagolpadua

Estou listando os “aniversariantes do mês”, gostaria que o hibernate já me devolvesse a lista ordenada pela data de aniversário,
mas tá difícil, veja que não é ordenar pela data de nascimento (aí seria fácil), gostaria de algo do tipo: criteria.addOrder(Order.asc(“day(nascimento)”));
Agradeço qualquer sugestão.

Criteria criteria = session.createCriteria(Usuario.class);

        Calendar cal = Calendar.getInstance();

        //pega o mes atual, lembrando que na classe calendar eh base 0 para janeiro
        int mes = (int) cal.get(Calendar.MONTH) + 1;

        criteria.add(Expression.sql("month({alias}.nascimento) = ?",
                new Integer(mes), Hibernate.INTEGER));
        criteria.addOrder(Order.asc("day(nascimento)")); <-- isto não funciona
        return criteria.list();

2 Respostas

tiagolpadua

Saiu por HQL, fica a dica pra quem tiver a mesma dificuldade:

String hql ="from Usuario u "
                + "where month(u.nascimento)=:mnasc "
                + "and u.ativo=:ativo "
                + "order by day(u.nascimento)";
        Query query = session.createQuery(hql);
        query.setInteger("mnasc", (int) cal.get(Calendar.MONTH) + 1);
        query.setBoolean("ativo", true);
        return query.list();
viniciuspadua

o problema é se trocar de BD as funções de data não funcionam!

Criado 24 de julho de 2011
Ultima resposta 13 de nov. de 2011
Respostas 2
Participantes 2