hibernate - 如何使用Criteria在select中进行选择

时间:2013-05-16 03:01:53

标签: mysql hibernate sql-order-by hibernate-criteria

我有以下mysql语句SELECT * FROM (SELECT * FROM NINJA ORDER BY NAME LIMIT 0,5) AS TABLE ORDER BY NAME DESC。我不知道如何将其转换为hibernate标准。我做这种select语句的原因是得到前5个结果然后命令它降序。在我目前正在进行正常Order.addOrder(Order.desc(field))的标准中,它会获得整个记录的最后5个结果。

请帮忙。提前谢谢。

更新:

以下是我的一些代码:

Criteria ninjaCriteria = session.createCriteria(Ninja.class);
ninjaCriteria.setFirstResult(firstResult);
ninjaCriteria.setMaxResults(maxResult);
if (isAscending)
    ninjaCriteria.addOrder(Order.asc(field));
else
    ninjaCriteria.addOrder(Order.desc(field));

注意:firstResultmaxResultisAscendingfield是变量。

2 个答案:

答案 0 :(得分:3)

试试这个。我希望它会起作用

Criteria ninjaCriteria = session.createCriteria(Ninja.class);
 ninjaCriteria.addOrder(Order.desc("NAME"));
ninjaCriteria.setMaxResults(5);

答案 1 :(得分:2)

我认为如何在不使用纯SQL的情况下解决这个问题的唯一方法就是像往常一样选择Ninja的列表:

Criteria ninjaCriteria = session.createCriteria(Ninja.class);
ninjaCriteria.addOrder(Order.asc("NAME"));
ninjaCriteria.setMaxResults(5);

创建自定义Comparator

/**
 * Compare Ninjas by Name descending
 */
private static Comparator<Ninja> ninjaNameComparator = new Comparator<Ninja>() {
    public int compare(Ninja ninja1, Ninja ninja2) {
        return ninja2.getName().compareTo(ninja1.getName());
    }
};

并使用它来对该列表进行降序排序:

Collection<Ninja> ninjas = ninjaDao.listNinja();
Collections.sort(ninjas, ninjaNameComparator);

从商业角度来看,它完全相同,不需要硬解决方案。