【问题标题】:Selecting random rows from database with ejb ql使用 ejb ql 从数据库中选择随机行
【发布时间】:2012-10-17 23:24:45
【问题描述】:

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

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

【问题讨论】:

    标签: java select jpa random ejbql


    【解决方案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();
    

    【讨论】:

    • 第一个查询返回了一个 Long 并且它抛出了一个异常,说它不能被转换为整数,所以我再次尝试使用原生查询,但是像你一样给出预期结果的类并添加 setMaxResult它就像魅力一样,所以谢谢你。
    【解决方案2】:

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

    SELECT column FROM table  
    ORDER BY RAND ()  
    

    感谢 javatpoint 不错的教程

    javatpoint take a look at here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 1970-01-01
      相关资源
      最近更新 更多