我想在数据库中找到一个表的列的10个nearset值到我的值。 所以我想对该列的值进行排序,然后找到比我的值小10或更大的值。 我怎样才能做到这一点 非常感谢你的帮助
答案 0 :(得分:1)
HQL支持ORDER BY
。
要么你做
Query q = session.createQuery("from Table order by abs(value - :v) asc";
q.setXxx("v", myValue); /* Xxx is Float or Long or Integer or... */
q.setMaxResults(10);
List<Table> l = q.list();
或
Query q1 = session.createQuery("from Table where value >= :v order by value asc";
q1.setXxx("v", myValue); /* Xxx is Float or Long or Integer or... */
q1.setMaxResults(10);
List<Table> l1 = q1.list();
Query q2 = session.createQuery("from Table where value < :v order by value desc";
q2.setXxx("v", myValue); /* Xxx is Float or Long or Integer or... */
q2.setMaxResults(10);
List<Table> l2 = q2.list();
/* now find the 10 nearest elements in Java code */
...
while (...) {
...
}
在第二个例子中,你有两个选择的不便,它们总共给你20行,然后你必须在Java代码中找到最近的10个,但如果值列上有数据库索引,它可能会快得多。两个例子的结果都是一样的。