2

我有以下 mysql 语句SELECT * FROM (SELECT * FROM NINJA ORDER BY NAME LIMIT 0,5) AS TABLE ORDER BY NAME DESC。我不知道如何将其转换为休眠标准。我做这种选择语句的原因是得到前 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 是变量。

4

2 回答 2

3

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

Criteria ninjaCriteria = session.createCriteria(Ninja.class);
 ninjaCriteria.addOrder(Order.desc("NAME"));
ninjaCriteria.setMaxResults(5);
于 2013-06-02T10:55:26.610 回答
2

在我看来,在不使用纯 SQL 的情况下解决此问题的唯一方法是Ninja像往常一样选择 s 列表:

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);

从商业的角度来看,它是完全一样的,不需要硬性的解决方案。

于 2013-06-05T15:21:13.910 回答