Java 从数据库表中随机选择实体?

Java 从数据库表中随机选择实体?,java,database,jakarta-ee,jpa,jpql,Java,Database,Jakarta Ee,Jpa,Jpql,如何从数据库表中随机选择行?我正在使用JPA,如果可能的话,我想使用CriteriaAPI。我知道有一个SQL等价物,类似于: SELECT TOP 5 Id, Name FROM mNames ORDER BY NEWID() 但是如何使用JPQL和Criteria API实现这一点呢? 可能是用NativeQuery?有更好的方法吗?如果您只需要一个随机行,那么您可以这样做: //random is instance of java's Random class, and

如何从数据库表中随机选择行?我正在使用JPA,如果可能的话,我想使用CriteriaAPI。我知道有一个SQL等价物,类似于:

    SELECT TOP 5 Id, Name FROM mNames
    ORDER BY NEWID()
但是如何使用JPQL和Criteria 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);

我没有测试代码,但您应该明白了。

如果实体的主键不是任意数字,而是功能性的,您最好随机创建一个有效键,然后查询特定行,这是一种快速操作,而不是执行可能大量的行来过滤除一行之外的所有行