SPS*_*SPS 15 spring hibernate jpa spring-data spring-data-jpa
我想使用Spring数据JPA获取随机记录.我正在使用@Query.但这需要很长时间.
@Query("select que from Question que order by RAND()")
public List<Question> findRandamQuestions();
Run Code Online (Sandbox Code Playgroud)
这样做的有效方法是哪种?请帮忙!
小智 22
问题select que from Question que order by RAND()
是您的数据库将在返回一个项目之前订购所有记录.所以它在大型数据集中很昂贵.
实现这一目标的更便宜的方法包括两个步骤:
例如,要在MySql中执行此操作,您可以执行以下操作:
select count(*) from question;
// using any programming language, choose a random number between 0 and count-1 (let's save this number in rdn), and finally
select * from question LIMIT $rdn, 1;
Run Code Online (Sandbox Code Playgroud)
好的,但要在spring数据中执行此操作,您需要创建一些本机查询...
幸运的是,我们可以使用分页来解决这个问题.在您的存储库接口中,创建方法(某些存储库具有此功能而无需定义它):
Long count();
Page<Question> findAll(Pageable pageable);
Run Code Online (Sandbox Code Playgroud)
在您的服务中,您可以通过以下方式使用您的存储库:
public Question randomQuestion() {
Long qty = questionRepository.countAll();
int idx = (int)(Math.random() * qty);
Page<Question> questionPage = questionRepository.findAll(new PageRequest(idx, 1));
Question q = null;
if (questionPage.hasContent()) {
q = questionPage.getContent().get(0);
}
return q;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8589 次 |
最近记录: |