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

时间:2014-07-02 19:02:21

标签: java database java-ee jpa jpql

如何从数据库表中随机选择行?我使用JPA并希望尽可能使用Criteria API。我知道有一个SQL等价物,如:

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

但是我如何使用JPQL和Criteria API执行此操作? 可能,使用NativeQuery?还有更好的方法吗?

2 个答案:

答案 0 :(得分: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);

我没有测试代码,但你应该明白这个想法。

答案 1 :(得分:0)

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