2014-07-02 44 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

如果您的实体的主键不是一个任意数字,而是一些功能,您可能会更好,随机创建一个有效的键,然后查询特定的行,这是快速操作,而不是执行一个可能大行数只是为了过滤除了一个以外的所有内容。