我将如何从数据库表中随机选择行?我正在使用JPA,并希望尽可能使用Criteria API。我知道有一个SQL等价的,喜欢的东西:从数据库表中随机选择Entites?
SELECT TOP 5 Id, Name FROM mNames
ORDER BY NEWID()
但我会怎么做这与JPQL和标准API? 可能使用NativeQuery?有没有更好的办法?
我将如何从数据库表中随机选择行?我正在使用JPA,并希望尽可能使用Criteria API。我知道有一个SQL等价的,喜欢的东西:从数据库表中随机选择Entites?
SELECT TOP 5 Id, Name FROM mNames
ORDER BY NEWID()
但我会怎么做这与JPQL和标准API? 可能使用NativeQuery?有没有更好的办法?
如果你需要的是一个单一的随机行,那么你可以做这样的事情:
//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);
我没有测试的代码,但你应该明白我的意思。
如果您的实体的主键不是一个任意数字,而是一些功能,您可能会更好,随机创建一个有效的键,然后查询特定的行,这是快速操作,而不是执行一个可能大行数只是为了过滤除了一个以外的所有内容。