2014-07-02 48 views
0

我將如何從數據庫表中隨機選擇行?我正在使用JPA,並希望儘可能使用Criteria API。我知道有一個SQL等價的,喜歡的東西:從數據庫表中隨機選擇Entites?

SELECT TOP 5 Id, Name FROM mNames 
    ORDER BY NEWID() 

但我會怎麼做這與JPQL和標準API? 可能使用NativeQuery?有沒有更好的辦法?

回答

1

如果你需要的是一個單一的隨機行,那麼你可以做這樣的事情:

//random is instance of java's Random class, and numberOfRows is total number of rows in the table 
long rowIndex = random.nextLong()%numberOfRows; 

TypedQuery typedQuery = ...; 
typedQuery.setFirstResult(rowIndex); 
typedQuery.setMaxResults(1); 

我沒有測試的代碼,但你應該明白我的意思。

0

如果您的實體的主鍵不是一個任意數字,而是一些功能,您可能會更好,隨機創建一個有效的鍵,然後查詢特定的行,這是快速操作,而不是執行一個可能大行數只是爲了過濾除了一個以外的所有內容。