在MySQL中,
SELECT id FROM table ORDER BY RANDOM() LIMIT 5
这个 SQL 可以选择 5 行随机数据。如何通过 JPA 查询实现此功能(使用 Hibernate 作为提供程序,MySQL 数据库)?
谢谢。
只有规范中定义的函数才保证被所有JPA提供商支持,RAND
或RANDOM
不在其中。因此我认为你无法在JPQL中实现它。
但是,在HQL中可以实现(HQL中的order by子句会传递到数据库,因此您可以使用任何函数):
String query = "SELECT o.id FROM Order o ORDER BY random()";
Query q = em.createQuery(query);
q.setMaxResults(5);
但是,我再说一遍:
尝试预先计算随机值,并使用预先计算的随机值构建您的JPQL/HQL/本地查询。
@PersistenceContext
private EntityManager entityManager;
@Override
public UserResp getRandomUser() {
long orderByRandom = (long) ((java.lang.Math.random()*100 % 10 )+1);
return userMapper.entityToModel(userRepository.pickRandomUser(orderByRandom,entityManager));
}
@Transactional
default User pickRandomUser(Long rand, EntityManager manager) {
return manager.createQuery("SELECT u FROM User u ORDER BY "+rand,User.class).setMaxResults(1).getSingleResult();
}