2014-09-27 71 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