【问题标题】:Randomly select Entites from database table?从数据库表中随机选择实体?
【发布时间】:2014-08-23 17:05:02
【问题描述】:
如何从数据库表中随机选择行?我正在使用 JPA,如果可能的话,我想使用 Criteria API。我知道有一个 SQL 等价物,例如:
SELECT TOP 5 Id, Name FROM mNames
ORDER BY NEWID()
但是我将如何使用 JPQL 和 Criteria API 做到这一点?
可能,使用 NativeQuery?有没有更好的办法?
【问题讨论】:
标签:
java
database
jakarta-ee
jpa
jpql
【解决方案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);
我没有测试代码,但你应该明白了。
【解决方案2】:
如果您的实体的主键不是任意数字,而是某些功能,您最好随机创建一个有效键,然后查询特定行,这是一种快速操作,而不是执行可能很大的数字行只是为了过滤掉除一个之外的所有内容。