1

我正在开发一个用于广告房地产的网络应用程序。在搜索页面上,我想显示一些随机广告,但到目前为止,我还没有成功从数据库中选择随机记录。这在控制台中有效,但我无法真正将其放入 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();

当我写一个数字而不是 :random 参数时,它似乎起作用了,但是我遇到了一个异常。我试图用 NativeQuery 解决问题

Query q = em.createNativeQuery("SELECT * FROM RealEstate ORDER BY RANDOM()");
List<RealEstate> resL = q.getResultList();

但是当我尝试在网页上显示广告时,这些字段出现了问题。我猜是因为结果列表中有对象而不是房地产。我使用连接类型继承,我不知道它是否会干扰 nativequery 的使用,但我更喜欢使用 ejb ql 查询。我对任何想法持开放态度。

注意:我知道我选择了所有记录,只是顺序不同,下一步将限制结果集。

4

2 回答 2

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();
于 2012-10-18T05:31:35.910 回答
0

我会为随机数据做这样的事情

SELECT column FROM table  
ORDER BY RAND ()  

感谢 javatpoint 不错的教程

javatpoint 看看这里

于 2016-04-16T12:04:26.977 回答