1

我想在数据库中找到与我的值相近的 10 个表的列的值。所以我想对该列的值进行排序,然后找到比我的值更小或更大的 10 个值。我该怎么做非常感谢您的帮助

4

1 回答 1

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 个,但如果 value 列上有数据库索引,它可能会快得多。两个示例的结果将相同。

于 2012-11-12T07:35:05.290 回答