我有以下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));
注意:firstResult
,maxResult
,isAscending
和field
是变量。
答案 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);
从商业角度来看,它完全相同,不需要硬解决方案。