2014-09-27 48 views
0

我想写一个随机函数,给出第n个排序列表中的n是随机的。 我使用休眠和我不想在DB排序表。 如何在不使用@Sort @OrderBy的情况下从数据库检索排序后的对象。休眠从数据库中检索排序后的对象

+0

你能解释这个“我不想在数据库中排序表”vs“从数据库中检索排序的对象”吗?你仍然想对数据库进行排序,但没有提到注释?排序 - >集合排序(Java级别排序),OrderBy - >与sql order相同,在db上排序。 – 2014-09-27 13:14:08

回答

0

您不想对数据库中的表进行排序,因此无法检索排序的项目。但是,您可以在检索它们后以编程方式对它们进行排序。

让我们假设你有一个Collection<Widget>,其中Widget是:

class Widget { 
    //id, version etc 
    private String name; 

    //getters and setters 
} 

和查询类似

final List<Widget> result = /*create query*/.list(); 

现在,所有你需要做的,采取n个分类项目是:

Optional<Widget> nth = result.stream(). 
     sorted(Comparator.comparing(Widget::getName)). 
     skip(n - 1). 
     findAny(); 

如果至少有n项然后nth.get将返回它。否则它会抛出一个NoSuchElementException