使用JPQL获取随机行

时间:2009-11-22 10:35:41

标签: random jpql

是否可以使用JPQL获取随机行?例如在SQL Server中我会使用: 从myTable中选择*,其中columnName = 4 order by newid()

谢谢, 杆

2 个答案:

答案 0 :(得分:4)

这就是我使用的。我首先获取实体的行数,然后将获取查询的结果限制为随机行。这涉及两个查询,因此如果这对您来说是个问题,您可能需要查看本机查询。如果不是这里是我使用的代码:

 public <T> T randomEntity(EntityManager em, Class<T> clazz) {
      Query countQuery = em.createQuery("select count(id) from "+clazz.getName());
      long count = (Long)countQuery.getSingleResult();

      Random random = new Random();
      int number = random.nextInt((int)count);

      Query selectQuery = em.createQuery("from "+clazz.getName());
      selectQuery.setFirstResult(number);
      selectQuery.setMaxResults(1);
      return (T)selectQuery.getSingleResult();
 }

答案 1 :(得分:1)

截至今天(2010年4月9日),JPQL不支持随机排序