我正在开发一个广告房地产的网络应用程序。在搜索页面上,我想展示一些随机广告,但到目前为止,我没有成功从数据库中选择随机记录。这在控制台中有效,但我无法真正将它放入EJB QL中:
SELECT * FROM RealEstate ORDER BY RANDOM()
我尝试了什么:
Random random = new Random();
Query q = em.createQuery("SELECT r FROM RealEstate r ORDER BY :random");
q.setParameter("random", random.nextInt());
return q.getResultList();
当我写一个数字而不是:随机参数时似乎工作但是我得到了一个异常。我试图用NativeQuery解决问题
Query q = em.createNativeQuery("SELECT * FROM RealEstate ORDER BY RANDOM()");
List<RealEstate> resL = q.getResultList();
但是当我试图在网页上显示广告时,字段出现了问题。我猜是因为结果列表中的对象不是RealEstates。我使用连接类型继承我不知道它是否干扰了nativequery的使用,但我更喜欢使用ejb ql查询。我对任何想法持开放态度。
注意:我知道只选择顺序不同的所有记录,限制结果集将是下一步。
答案 0 :(得分:1)
我认为你几乎解决了自己的问题。
我会检索记录的数量
Integer singleResult = em.createQuery("SELECT count(r) FROM RealEstate r", Integer.class).getSingleResult();
然后,我会创建一个随机数,最后
Random random = new Random();
RealEstate RealEstate = em.createQuery("SELECT r FROM RealEstate r", RealEstate.class)
.setFirstResult(random.nextInt(size))
.setMaxResults(1)
.getSingleResult();
答案 1 :(得分:0)
我会为 随机数据
做类似的事情SELECT column FROM table
ORDER BY RAND ()
感谢javatpoint很好的教程